HTTP協議中GET和POST的區別(詳細描述)


       HTTP協議在現代網絡通信中被廣泛應用,在HTTP 1.0版本中有7種請求方式,在HTTP 1.1版本中有8種請求方式,而這些請求方式中最常用的就是GET和POST,網上關於GET與POST請求方式的區別的文章很多,但卻都不夠全面。現在我們來全面闡述這兩種方法的區別。

(一)從HTTP報文來看

  GET請求方式將請求信息放在URL后面,請求信息和URL之間以?隔開,請求信息的格式為鍵值對,例如 https://baike.baidu.com/item/Python/407313?fr=aladdin,這種請求方式將請求信息直接暴露在URL中,安全性較低。另外從報文結構上來看,由於請求信息放置在URL中,因此請求報文中不需要報文體。

  POST請求方式將請求信息放置在報文體中,相獲得請求信息必須解析報文,因此安全性較GET方式要高一些(事實上要獲得報文體中的請求信息也是很容易的,因此安全性上兩者並沒有太多的區別,具體解決傳輸過程中的安全性問題還要靠HTTPS),此外在請求報文中含有報文體。

  由於GET中的請求信息放置在URL中,因此是有長度限制的,因為URL本身是有長度限制的。POST中的請求信息是放置在報文體中,因此對數據長度是沒有限制的。

(二)從數據庫層面來看

  CET請求方式符合冪等性和安全性,(冪等性的定義:對數據庫的一次操作和多次操作獲得的結果是一致的,則認為符合冪等性。安全性的定義:對數據庫的操作沒有改變數據庫中的數據,則認為符合安全性),GET請求方式是做查詢操作,因此不會改變數據庫中原有的數據,認為符合安全性。事實上GET請求可能會出現多次請求的結果(例如在兩次請求中間對數據庫中的數據作了更改),從這來說是不符合冪等性的定義,但是因為GET請求知識查詢數據庫,不會對數據庫做任何更改,因此也認為是冪等的。

  POST請求方式是既不冪等又不安全,首先POST請求方式往數據庫中提交數據的,因此會改變數據庫中的數據。其次,POST請求方式每次獲得的結果都有可能不一樣,因為POST請求是作用在上一級的URL上的,則每一次請求都會添加一份新資源(這也是POST和PUT方式的最大區別,PUT方式是冪等的)。

  注意:在這里提到的安全性和上一部分提到的安全性不是同一概念,不要混淆。

(三)從其他層面來看

  GET請求能夠被緩存。

  GET請求會保存在瀏覽器的瀏覽記錄中。

  以GET請求的URL能夠保存為瀏覽器書簽。

  而POST方式都不具備上述功能。緩存也是GET請求被廣泛應用的根本,在現代網絡上每天產生的請求數目是巨大地,並且其中絕大部分請求均為只讀請求,如果所有這些請求都要交由 Web 服務器直接處理,這無疑是巨大的資源浪費。從第二部分知道GET表達的是一種冪等的、安全的,它除了返回結果不應該會產生其它副作用,因此絕大部分GET請求(通常超過90%)都直接被CDN緩存了,這能大大減少 Web 服務器的負擔。 而POST是非冪等的,有副作用的操作,所以必須交由 Web 服務器處理。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM