HTTP 中 GET 與 POST 的區別

本文首發地址:lijianfei.comhtml

  1. GET在瀏覽器回退時是無害的,而POST會再次提交請求。
  2. GET產生的URL地址能夠被Bookmark,而POST不能夠。
  3. GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
  4. GET請求只能進行url編碼,而POST支持多種編碼方式。
  5. GET請求參數會被完整保留在瀏覽器歷史記錄裏,而POST中的參數不會被保留。
  6. GET請求在URL中傳送的參數是有長度限制的,而POST麼有。
  7. 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
  8. GET比POST更不安全,由於參數直接暴露在URL上,因此不能用來傳遞敏感信息。
  9. GET參數經過URL傳遞,POST放在Request body中。

本標準答案參考自w3schools瀏覽器


還有的同窗會說,GET請求不支持body傳遞數據,這是不對滴;安全

其實 HTTP 規範並未規定說 GET 就不能發送 body 數據,在 RFC GET 中只是說網絡

The GET method means retrieve whatever information (in the form of an entity) is identified by the Request-URI.ide

只是說 GET 意味着經過 URI 來識別資源。編碼

But...url

關於get請求body傳參,並不推薦經過body傳參,能夠參考stackoverflow關於該問題的回答 stackoverflow.com/questions/9…orm


GET和POST還有一個重大區別,簡單的說:htm

GET產生一個TCP數據包;POST產生兩個TCP數據包。資源

由於POST須要兩步,時間上消耗的要多一點,看起來GET比POST更有效。

But…並非萬能的。

  1. GET與POST都有本身的語義,不能隨便混用。

  2. 在網絡環境好的狀況下,發一次包的時間和發兩次包的時間差異基本能夠無視。而在網絡環境差的狀況下,兩次包的TCP在驗證數據包完整性上,有很是大的優勢。

  3. 並非全部瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。

相關文章
相關標籤/搜索