首先,我們要明白,get和
post
本質上都是
tcp鏈結,那他們為什麼會不一樣?
就好像,在網際網路世界中,http(交通規則)會給不同服務型別的
tcp(汽車)貼上不同的標籤;因為標籤不同所以使用方法也不一樣。
先說說他們表面上的不同點:
(1)傳參方式不同
get是通過
url傳遞引數,
post
則是將資料放置在
request body中。
(2)傳參方式導致的長度限制不同
get有
url長度限制(瀏覽器的限制),而
post
沒有長度限制。
(3)傳參方式導致的安全性問題
由於get通過
url傳參,因此資料都顯示在使用者面前,肯定不安全;而
post
不會作為
url的一部分,也不會被快取、但能夠被儲存在伺服器日誌以及瀏覽器瀏覽記錄中。
(4)瀏覽器回退導致的不同結果
get在瀏覽器回退時是無害的,而
post
會再次提交請求。
因此,一般來說,post用於修改和寫入資料;而
get一般用於搜尋排序和篩選之類的操作,目的是獲取資源,讀取資料。
上面是他們的表面不同,但是一開始就說了,get和
post
本質上都是
tcp鏈結,那麼真正導致他們不同的是交通規則,也就是
協議;
由於協議規定,就導致get比
post
更快,原因如下:
(1)post請求包含更多請求頭
(2)請求的方式不一樣
psot請求:
1) 瀏覽器請求tcp連線(第一次握手)
2) 伺服器答應進行tcp連線(第二次握手)
3) 瀏覽器確認並傳送psot請求頭(第三次握手)
4) 伺服器返回100 continue響應
5) 瀏覽器傳送資料
6) 伺服器返回200 ok響應
get請求:
1)瀏覽器請求
tcp連線(第一次握手)
2)伺服器答應進行
tcp連線(第二次握手)
3)瀏覽器確認,並傳送
get請求頭和資料(第三次握手)
4)伺服器返回
200 ok
響應
由上面我們可以知道,post產生兩個
tcp資料報,
get則只產生乙個
tcp資料報;這個不同點,在網路好的時候差別不大,但是在網路差的時候,兩次tcp在驗證資料報完整性上就顯得比較有優勢。
(3)靜態資料的快取方面
如果get請求的是靜態資源,則會在第一次開啟時進行快取處理,這樣在使用者第二次訪問相同位址時能夠快速開啟;而
post
則不行。
(4)post不能進行管道化傳輸
http/1.1中,還有一種稱為管道通訊的方式進行速度優化:把需要傳送到伺服器上的所有請求放到輸出佇列中,在第乙個請求傳送出去後,不等到收到伺服器的應答,第二個請求緊接著就傳送出去,如果連線中斷,則清空重新傳送;這樣的通訊方式對於冪等請求
get還好(每次都是相同的結果),但是
post
就不行了(比如支付)。
冪等的概念:
http 冪等方法是指無論呼叫多少次都不會有不同結果的
方法。(
它只作用於結果而非資源本身)
持久連線:
http/1.0+中是
connection
首部中新增
keep-alive
值(持久連線是預設的,除非在
connection
中新增close)
http/1.1中是在
connection
首部中新增
persistent
值(必須在
connection
首部中新增
keep-alive
,否則在接收資料報後就斷開連線,不能持久化)
雖然我們說get有
url長度限制,但是http協議並沒有規定
get和
post
的長度限制,get的最大長度限制是因為瀏覽器和web伺服器規定的,因此,由於沒有乙個統一的協議規定,這導致了在不同瀏覽器和web伺服器對
get的限制長度也是不一樣的,如果超出了最大長度,大部分的伺服器直接截斷,也有一些伺服器會報
414錯誤。
瀏覽 器:
( 1)ie:
ie瀏覽器 對
url長度限制是
2083
(2k+53
),超過這個限制,則自動截斷(若是
form
提交則提交按鈕不起作用)。
(2)firefox
:火狐瀏覽器的
url長度限制為
65536
字元,但實際上有效的
url最大長度不少於
100,000
個字元。
(3)chrome
:谷歌 瀏覽器 的url長度限制超過
8182
個字元返回本文開頭時列出的錯誤。
伺服器 :
(1)apache
:apache
能接受url
長度限制為
8 192
字元
(2)iis
:iis
能接受url
長度限制為
16384
個字元
由於ie瀏覽器對
url長度的允許值是最小的,所以**開發中,只要
url不超過
2083
位元組,那麼在所有瀏覽器中工作都不會有問題。
get和post的區別
在b s應用程式中,前台與後台的資料互動,都是通過html中form表單完成的。form提供了兩種資料傳輸的方式 get和post。雖然它們都是資料的提交方式,但是在實際傳輸時確有很大的不同,並且可能會對資料產生嚴重的影響。雖然為了方便的得到變數值,web容器已經遮蔽了二者的一些差異,但是了解二者的...
post和get的區別?
1.get是從伺服器上獲取資料,post是向伺服器傳送資料。get 和 post只是一種傳遞資料的方式,get也可以把資料傳到伺服器,他們的本質都是傳送請求和接收結果。只是組織格式和資料量上面有差別,http協議裡面有介紹。2.get是把引數資料佇列加到提交表單的action屬性所指的url中,值和...
post和get的區別
兩者的主要區別在資料傳送方式和接收方式上 1 在客戶端 get方式是通過url提交資料 post方式是提交後位址列是不變的 2 在伺服器端 get方式是利用解析位址列字串的方式,伺服器獲取get提交的值 post方式是以form的形式提交表單引數 一般來說,盡量避免使用get方式提交表單,因為有可能...