面試題 深入理解get和post

2021-10-05 03:05:28 字數 1235 閱讀 2781

【推薦閱讀】微服務還能火多久?>>>

首先,我們要明白,get和post本質上都是tcp鏈結,那他們為什麼會不一樣?就好像,在網際網路世界中,http(交通規則)會給不同服務型別的tcp(汽車)貼上不同的標籤;因為標籤不同所以使用方法也不一樣。

get是通過url傳遞引數,post則是將資料放置在request body中。

get有url長度限制(瀏覽器的限制),而post沒有長度限制。

由於get通過url傳參,因此資料都顯示在使用者面前,肯定不安全;而post不會作為url的一部分,也不會被快取、但能夠被儲存在伺服器日誌以及瀏覽器瀏覽記錄中。

get在瀏覽器回退時是無害的,而post會再次提交請求。

上面是他們的表面不同,但是一開始就說了,get和post本質上都是tcp鏈結,那麼真正導致他們不同的是交通規則,也就是http協議;由於協議規定,就導致get比post更快。

如果get請求的是靜態資源,則會在第一次開啟時進行快取處理,這樣在使用者第二次訪問相同位址時能夠快速開啟;而post則不行。

http/1.1中,還有一種稱為管道通訊的方式進行速度優化:把需要傳送到伺服器上的所有請求放到輸出佇列中,在第乙個請求傳送出去後,不等到收到伺服器的應答,第二個請求緊接著就傳送出去,如果連線中斷,則清空重新傳送;這樣的通訊方式對於冪等請求get還好(每次都是相同的結果),但是post就不行了(比如支付)。

http 冪等方法是指無論呼叫多少次都不會有不同結果的 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錯誤。

一般來說,post用於修改和寫入資料,get目的是獲取資源,讀取資料;post產生兩個tcp資料報,get則只產生乙個tcp資料報;因此post的兩次tcp在驗證資料報完整性上比較有優勢。由於ie瀏覽器對url長度的允許值是最小的,所以**開發中,只要url不超過2083位元組,那麼在所有瀏覽器中工作都不會有問題。

深入理解post和get請求。

最直觀的區別就是get把引數包含在url中,post通過request body傳遞引數。http協議是基於tcp ip協議的。所以get和post的底層也是基於tcp ip協議,也就是說,get post都是tcp鏈結。get和post能做的事情是一樣一樣的。你要給get加上request bod...

深入理解GET和POST的區別

1 post更安全 不會作為url的一部分,不會被快取 儲存在伺服器日誌 以及瀏覽器瀏覽記錄中 2 post傳送的資料更大 get有url長度限制 3 post能傳送更多的資料型別 get只能傳送ascii字元 4 post比get慢 5 post用於修改和寫入資料,get一般用於搜尋排序和篩選之類...

POST請求與GET請求(面試題)

一 原理區別 http定義了與伺服器互動的不同方法,其中最基本的四種 get,post,put,delete,head,其中get和head被稱為安全方法,因為使用get和head的http請求不會產生什麼動作。不會產生動作意味著get和head的http請求不會在伺服器上產生任何結果。但是安全方法...