GET和POST到底有什麼區別?

GET和POST是我們web開發時最常用到的兩種http請求方法,其實http最初定義了八種方法,而這八種方法在本質上沒有任何區別。它們底層的實現也都是基於TCP/IP協議,之所以定義了這麼多,只是讓http請求更加的語義化而已。

如果說到區別,那也僅僅是數據傳輸形式上的差異,我們先來看一下這八種方法的定義:

  • OPTIONS 返回服務器所支持的請求方法
  • GET 向服務器獲取指定資源
  • HEAD 與GET一致,只不過響應體不返回,只返回響應頭
  • POST 向服務器提交數據,數據放在請求體裏
  • PUT 與POST相似,只是具有冪等特性,一般用於更新
  • DELETE 刪除服務器指定資源
  • TRACE 回顯服務器端收到的請求,測試的時候會用到這個
  • CONNECT 預留,暫無使用

此處我們只對get和post兩種方法做比較。

  1. 最直觀的區別就是,GET會把參數拼裝在url上,而POST會將參數http報文的主體部分,這就引申出了第2、3、4、5點的差異。
  2. 由於瀏覽器或者服務器對url長度的限制,而http報文主體沒有長度限制,所以出現了一種說法:GET請求有長度限制,而POST沒有(瀏覽器是對url有長度限制,而服務器是對整個請求頭長度有限制,包括了通用信息頭、請求頭、響應頭的總長度)
  3. GET 請求可以被緩存,POST 不能
  4. GET 請求保留在瀏覽器歷史記錄中,POST 不能
  5. GET 請求可被收藏爲書籤,POST 不能
  6. 如果你的 GET 請求中有非 ASCII 字符,會在請求之前進行轉碼,得到轉碼後的 URL,然後去發起 Get 請求

下面的表格比較了二者的不同。

  GET POST
後退按鈕/刷新 無害 數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。
書籤 可收藏爲書籤 不可收藏爲書籤
緩存 能被緩存 不能緩存
編碼類型 application/x-www-form-urlencoded application/x-www-form-urlencoded 或 multipart/form-data。爲二進制數據使用多重編碼。
歷史 參數保留在瀏覽器歷史中。 參數不會保存在瀏覽器歷史中。
對數據長度的限制 是的。當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。 無限制。
對數據類型的限制 只允許 ASCII 字符。 沒有限制。也允許二進制數據。
安全性

與 POST 相比,GET 的安全性較差,因爲所發送的數據是 URL 的一部分。

在發送密碼或其他敏感信息時絕不要使用 GET !

POST 比 GET 更安全,因爲參數不會被保存在瀏覽器歷史或 web 服務器日誌中。
可見性 數據在 URL 中對所有人都是可見的。 數據不會顯示在 URL 中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章