HTTP 兩種基本請求方法 GET和 POST的區別


GET方法

1、GET交互方式是從服務器上獲取數據,而並非修改數據,所以GET交互方式是安全的。就像數據庫查詢一樣,從數據庫查詢數據,並不會影響數據庫的數據信息,對數據庫來說,也就是安全的。
2、GET交互方式是冪等的,冪等是一個數學概念,冪等函數就是可以使用相同參數重復執行,並且能獲得相同結果的函數。在GET交互這里就是,對同一個URL的多個請求,得到的結果是相同的。就像數據庫查詢,不同的數據庫連接對同一個數據庫表用相同條件查詢時,得到的結果也是一樣的。

POST方法

1、POST交互是可以修改服務器數據的一種方式,涉及到信息的修改,就會有安全問題。就像數據庫的更新,Update一個數據庫表時,如果條件沒有寫對,就可能把不需要修改的數據給修改了,得到的數據就是錯誤的了。

2、一般的POST交互是必須要用到表單的,但是表單提交的默認方法是GET,如果改為POST方式,就需要修改表單提交時的Method。

GET和POST表現形式區別

GET 方法查詢字符串(名稱/值對)是在 GET 請求的 URL 發送的:

GET /test/demo_form.php?name1=value1&name2=value2 HTTP/1.1

POST 方法查詢字符串(名稱/值對)是在 POST 請求的 HTTP 消息主體中發送的:

POST /test/demo_form.php HTTP/1.1
Host: runoob.com

name1=value1&name2=value2

 

GET

POST

后退按鈕/刷新

無害

數據會被重新提交(瀏覽器應該告知用戶數據會被重新提交)。

書簽

可收藏為書簽

不可收藏為書簽

緩存

能被緩存

不能緩存

編碼類型

application/x-www-form-urlencoded

application/x-www-form-urlencoded or multipart/form-data。為二進制數據使用多重編碼。

歷史

參數保留在瀏覽器歷史中。

參數不會保存在瀏覽器歷史中。

對數據長度的限制

是的。當發送數據時,GET 方法向 URL 添加數據;URL 的長度是受限制的(URL 的最大長度是 2048 個字符)。

無限制。

對數據類型的限制

只允許 ASCII 字符。

沒有限制。也允許二進制數據。

安全性

與 POST 相比,GET 的安全性較差,因為所發送的數據是 URL 的一部分。
在發送密碼或其他敏感信息時絕不要使用 GET !

POST 比 GET 更安全,因為參數不會被保存在瀏覽器歷史或 web 服務器日志中。

可見性

數據在 URL 中對所有人都是可見的。

數據不會顯示在 URL 中。

GET和POST本質區別

GET和POST本質上都是TCP鏈接,能做的事情並無差別。但是由於HTTP的規定和瀏覽器/服務器的限制,導致他們在應用過程中體現出一些不同。 

GET和POST還有一個重大區別:

GET產生一個TCP數據包:對於GET方式的請求,瀏覽器會把http header和data一並發送出去,服務器響應200(返回數據);

POST產生兩個TCP數據包:對於POST,瀏覽器先發送header,服務器響應100 continue,瀏覽器再發送data,服務器響應200 ok(返回數據)。

因為POST需要兩步,時間上消耗的要多一點,看起來GET比POST更有效。因此Yahoo團隊有推薦用GET替換POST來優化網站性能。但這是一個坑!跳入需謹慎。為什么?

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

2. 據研究,在網絡環境好的情況下,發一次包的時間和發兩次包的時間差別基本可以無視。而在網絡環境差的情況下,兩次包的TCP在驗證數據包完整性上,有非常大的優點。

3. 並不是所有瀏覽器都會在POST中發送兩次包,Firefox就只發送一次。

 

參考:https://www.cnblogs.com/logsharing/p/8448446.html


免責聲明!

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



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