get和post的作用和區別

2021-09-25 06:43:27 字數 3477 閱讀 3416

首先,我們要明白,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方式提交表單,因為有可能...