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

2021-09-25 18:09:49 字數 1814 閱讀 2243

get和post本質上沒有區別,都是http協議中傳送請求的方法

http是基於tcp/ip的關於資料如何在全球資訊網中通訊的協議。所以這兩種請求方式同樣基於tcp/ip,只是規範上有一些區別而已。get方法主要用來獲取伺服器上的資源,而post方法是用來向伺服器特定url的資源提交資料。

眾所周知,get引數是通過url傳遞,而post放在request body中,這僅是一種規範而已,其實get和post能做的事情是一樣一樣的。你要給get加上request body,給post帶上url引數,技術上是完全行的通的。 打個比方:

在全球資訊網世界中,tcp就像汽車,我們用tcp來運輸資料,它很可靠,從來不會發生丟件少件的現象。但是如果路上跑的全是看起來一模一樣的汽車,那這個世界看起來是一團混亂,送急件的汽車可能被前面滿載貨物的汽車攔堵在路上,整個交通系統一定會癱瘓。為了避免這種情況發生,交通規則http誕生了。http給汽車運輸設定了好幾個服務類別,有get, post, put, delete等等,http規定,當執行get請求的時候,要給汽車貼上get的標籤(設定method為get),而且要求把傳送的資料放在車頂上(url中)以方便記錄。如果是post請求,就要在車上貼上post的標籤,並把貨物放在車廂裡。當然,你也可以在get的時候往車廂內偷偷藏點貨物,但是這是很不光彩;也可以在post的時候在車頂上也放一些資料。http只是個行為準則,而tcp才是get和post怎麼實現的基本。

(本標準答案參考自w3schools)

如果說get和post方法本質是一樣的,那以上的區別和限制是哪來的呢?

在全球資訊網世界中,還有另乙個重要的角色:運輸公司。不同的瀏覽器(發起http請求)和伺服器(接受http請求)就是不同的運輸公司。 雖然理論上,你可以在車頂上無限的堆貨物(url中無限加引數)。但是運輸公司可不傻,裝貨和卸貨也是有很大成本的,他們會限制單次運輸量來控制風險,資料量太大對瀏覽器和伺服器都是很大負擔。業界不成文的規定是,(大多數)瀏覽器通常都會限制url長度在2k個位元組,而(大多數)伺服器最多處理64k大小的url。超過的部分,恕不處理。如果你用get服務,在request body偷偷藏了資料,不同伺服器的處理方式也是不同的,有些伺服器會幫你卸貨,讀出資料,有些伺服器直接忽略,所以,雖然get可以帶request body,也不能保證一定能被接收到哦。

所以這個url長度的限制並不是http的規範在限制長度,而是不同的瀏覽器和伺服器制定的。如果url不限長度,那麼瀏覽器在處理超長url時,就需要投入更多的資源去解析請求,使處理速度下降,導致瀏覽體驗很「卡」。伺服器在解析超長的url也會消耗更多資源。

那為什麼引數要放在url,不統一放在請求body裡呢,因為對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料)。而對於post,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。所以對於一些不是非常重要的引數,選擇get方法會更快更好,而post更穩定安全。

post要比get安全只是表現在get的url會被放在瀏覽器歷史和web伺服器日誌裡面,而post發完基本就沒有了。如果明文傳輸資料被抓包了,其實兩種方法一樣不安全。所以post並不比get安全多少。

一般來說get訪問靜態資源,瀏覽器會自動快取(不同瀏覽器對此功能可能有不同設定),但是post並不是不能被快取。只是對http請求的優化大多數都放在get請求上,比如對沒有資料變化的請求(**中常用的靜態檔案)做快取。所以只是get和post兩種請求的目的不同,post在大部分情況下確實不需要做快取處理,所以很少會做。但是這不代表不能做快取處理。

由於http的規定和瀏覽器/伺服器的限制,導致他們在應用過程中體現出一些不同。現實的業務需求,適用的情景不同,所以要區分不同的請求方式,慢慢的這種區別,規範讓我們自發地遵守下去。

兩種http請求 get和post

1,定義 在客戶機與伺服器之間進行請求 響應時常用到get和post請求方法。get 從指定的資源請求資料 post 向指定的資源提交要被處理的資料 2,get請求方法 請注意,查詢字串 名稱 值對 是在get請求的url中傳送的 test demo form.asp?name1 value1 na...

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

get和post是http請求的兩種基本方法,要說它們的區別,接觸過web開發的人都能說出一二。最直觀的區別就是get把引數包含在url中,post通過request body傳遞引數。你可能自己寫過無數個get和post請求,或者已經看過很多權威 總結出的他們的區別,你非常清楚知道什麼時候該用什麼...

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

get和post是http請求的兩種基本方法,要說它們的區別,接觸過web開發的人都能說出一二。最直觀的區別就是get把引數包含在url中,post通過request body傳遞引數。你可能自己寫過無數個get和post請求,或者已經看過很多權威 總結出的他們的區別,你非常清楚知道什麼時候該用什麼...