Get和Post的正解

2022-04-10 18:36:34 字數 1561 閱讀 9534

前言:很多小夥伴對於get和post都是淺層次的理解。這篇文章將帶你從通俗易懂的語言上深入的了解get和post。

一,什麼是get/post?

在了解get和post之前,我們要先了解tcp/ip和http。簡單來說,tcp/ip是網路架構,tcp/ip是五層網路架構(區分於osi七層架構),tcp/ip自上而下分為應用層,傳輸層,網路層,資料鏈路層,物理層。更深入的知識這裡就不涉及,有興趣可以自己去了解。http是位於應用層的協議,tcp位於傳輸層(區別於udp),ip是位於網路層的。簡單來說,http是基於tcp/ip的一種通訊協議(超文字傳輸協議,所有www都必須遵循這個協議,你所看到的網頁都是基於這個協議)。

那初步知道了tcp/ip的網路模型和http後,我們來進一步了解get和post。

get和post是http上的兩種請求方式,其本質是tcp鏈結,兩者並無差別。(請求方式:get,post,put,delect)(標準六種:get,post,put,delect,head,options)

二·,get/post誤解

傳統上,很多人認為get是通過url傳輸資料,post是通過response body傳輸資料;get的傳參大小是2k,post是64k;post比get安全等等,這些都是錯誤的理解。

從上面的解釋,我們已經知道get和post其實就是tcp是兩種鏈結。通過一定的技術手段,get也可以通過response body傳參,post也可以通過url傳參。

舉個例子:在一條公路上,跑車很多運輸貨品的車輛,這些車輛就好比是tcp,同時,這些車輛有的運輸多,有的運輸少,因為沒有交通規則往往會導致公路堵塞,所以這時就有了交通規則----http,此時服務端和客戶端就像是兩個公司,乙個提供貨物,乙個接收貨物;而get就像是把貨物放在車的上面,post就是放在貨物箱裡面。按理來說,你要是把貨物放在上面的車輛在篩一些貨物放在裡面,或者是把貨物箱裡面的貨物拿出來放在車上,都是可以的。(這裡是引用知乎的解釋)

三,get和post的區別其實兩者在tcp傳輸中並無不同。

那說了這麼多,get和post的區別到底是什麼呢?

get會產生乙個tcp資料報,post會產生兩個tcp資料報。

get會傳送http header和data給服務端,服務端返回乙個200,請求成功。

post會先傳送http header給服務端,告訴服務端等一下會有資料過來,服務端返回100,告訴客戶端我已經準備接收資料,post在傳送乙個data給服務端,服務端返回200,請求成功。

但是上面所說的post會比get多乙個tcp包其實不太嚴謹。多發的那個expect 100 continue header報文,是由客戶端對http的post和get的請求策略決定的,目的是為了避免浪費資源,如頻寬,資料傳輸消耗的時間等等。所以客戶端會在傳送header的時候新增expect 100去探探路,如果失敗了就不用繼續傳送data,從而減少了資源的浪費。所以是否在傳送乙個包取決了客戶端的實現策略,和get/post並沒什麼關係。有的客戶端比如firefox就只傳送乙個包。

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方式提交表單,因為有可能...