天天看點

get請求和post請求差別

1.​HTTP協定​

1.1 HTTP協定的特點

無論是POST還是GET請求,都是基于​超文本傳輸協定​(​HTTP​)的,而HTTP協定是TCP/IP協定族的應用層協定。

HTTP協定用戶端請求request消息包括以下格式:

請求行(request line)、請求頭部(header)、空行、請求資料      
get請求和post請求差別

服務端響應response也由四個部分組成,分别是:

  • http響應行
  • http響應頭
  • 空行
  • http響應體
get請求和post請求差別

1.2 請求方法

HTTP協定定義了多種請求方式,具體如下:​

​GET​

​:​擷取資源​,用來請求通路已被URI(統一資源标志符,和URL是包含和被包含的關系)識别的資源。​

​POST​

​:用來​傳輸實體的主體​,雖然GET也可以實作,但是一般不用。​

​PUT​

​:​傳輸檔案​。但是鑒于PUT方法自身不帶驗證機制,任何人都可以上傳檔案,存在安全性問題,是以一般網站都不采用該方法。​

​HEAD​

​:​獲得封包首部​。和GET請求一樣,隻是不傳回封包主體部分。​

​DELETE​

​:​删除檔案​。同樣不帶驗證機制,存在安全性問題。​

​OPTIONS​

​:​詢問指定的請求URI支援哪些方法​。​

​TRACE​

​:​追蹤路徑​,讓Web伺服器将之前的請求通信環回給用戶端的方法。​

​CONNECT​

​:要求在​與代理伺服器通信時建立隧道​,實作隧道協定進行TCP通信。

2 ​POST和GET請求差別的常見誤區​

2.1 請求參數長度限制:GET請求長度最多1024kb,POST對請求資料沒有限制**

關于此點,在HTTP協定中沒有對URL長度進行限制,這個限制是​不同的浏覽器及伺服器​由于有不同的規範而帶來的限制。

2.2 GET請求一定不能用request body傳輸資料**

GET​可以帶request body,但不能保證一定能被接收到​。如果你用GET服務,在request body偷偷藏了資料,不同伺服器的處理方式也是不同的,有些伺服器會幫你讀出資料,有些伺服器直接忽略。

2.3 POST比GET安全性要高**

這裡的安全是相對性,通過GET送出的資料都将顯示到URL上,頁面會被浏覽器緩存,其他人檢視曆史記錄會看到送出的資料,而POST不會。另外GET送出資料還可能會造成CSRF攻擊。

2.4 GET産生一個TCP資料包,POST産生兩個TCP資料包**

對于GET方式的請求,浏覽器會把http header和data一并發送出去,伺服器響應200 OK(傳回資料);而對于POST,浏覽器先發送header,伺服器響應100 continue,浏覽器再發送data,伺服器響應200 OK(傳回資料)。注意,​

​盡管POST請求會分兩次,但body 是緊随在 header 後面發送的,根本不存在『等待伺服器響應』一說​

​。

3 ​POST和GET請求的差別小結​

  • ​請求參數​:GET請求參數是通過URL傳遞的,多個參數以&連接配接,POST請求放在request body中。
  • ​請求緩存​:GET請求會被緩存,而POST請求不會,除非手動設定。
  • ​收藏為書簽​:GET請求支援,POST請求不支援。
  • ​安全性​:POST比GET安全,GET請求在浏覽器回退時是無害的,而POST會再次請求。
  • ​曆史記錄​:GET請求參數會被完整保留在浏覽曆史記錄裡,而POST中的參數不會被保留。
  • ​編碼方式​:GET請求隻能進行url編碼,而POST支援多種編碼方式。
  • ​對參數的資料類型​:GET隻接受ASCII字元,而POST沒有限制。