get和post是http請求的兩種方式,底層都是用tcp/ip協議進行通訊的。使用者發出http請求的大致過程:
get和post本質並無區別,只是被http規定了不同的行為和方式。
之所以有get和post區分,是因為他們底層資料的傳輸都是基於tcp協議,如果不做區分,網路中都是某一種服務類別,難免會混亂。為了避免這種情況發生,http協議誕生了。
http給網路運輸設定了好幾個服務類別,有get,post,put,delete等等,http規定,當執行get請求的時候,要給請求包貼上get的標籤(設定method為get),而且要求把傳送的資料放在url中以方便記錄。如果是post請求,在請求資料報貼上post的標籤。
【請求】get請求在瀏覽器後退時無害,不傳送請求。
post在瀏覽器後退時會再次傳送請求。
【引數】get引數通常放在url後面傳遞,post則通常放在request body中傳遞。但實際上,get也可以用body少量傳值,post也可以在url中少量傳值,這在技術上是完全行的通的,只是不符合http的規定
【安全性】get比post更不安全,因為引數直接暴露在url上,所以不能用來傳遞敏感資訊。
【傳輸引數】get在url中傳輸引數有長度限制,post沒有限制。get之所以會限制請求長度,是因為url請求資料量太大對瀏覽器和伺服器都是很大的負擔,處理起來有成本,所以瀏覽器和伺服器對單次訪問都做了限制。(大多數)瀏覽器通常都會限制url長度在2k個位元組,而(大多數)伺服器最多處理64k大小的url。超過的部分,恕不處理。雖然get可以帶request body,也不能保證一定能被接收到。所以此處的不同,是因為http的規定和瀏覽器/伺服器的限制,導致他們在應用過程中體現出一些不同。所以如果請求引數可能很長很多的話,直接用post即可(如果用get,超過限制,引數傳不過去,會報null)!
get產生乙個tcp資料報,post產生兩個tcp資料報(重點區別!!!很多人不知道,面試能答出這一點極其加分!!!)。
對於get方式的請求,瀏覽器會把http header和data一併傳送出去,伺服器響應200(返回資料);
而對於post,瀏覽器先傳送header,伺服器響應100 continue,瀏覽器再傳送data,伺服器響應200 ok(返回資料)。
也就是post請求,第一次將header傳送過去,確認伺服器和網路沒問題可以服務,才會將真正的data資料提交。
因為post需要兩步,時間上消耗的要多一點,看起來get比post更有效。
get:如果主要是為了獲取資料,比如一些獲取資料的get請求,且加上請求引數的url不會特別大(小於1k還是2k),且最好沒有需要保密的字段,則用get請求;
post:如果主要是為了提交一些資料,比如提交一些資料給後台儲存,刪除等(通常是一些寫方法),無論是否有一定資料量均可使用post;
以上沒有嚴格劃分,即使使用post提交請求來get一些資料也是可以的
SpringMVC中post和get的區別
這是一篇我在csdn上的第一篇部落格,請大家多多支援。在前面我先宣告 這篇文章的內容基本上都是網上各部落格的,我只是整理一下,給需要的人梳理一下而已。首先先放個人覺得比較好的關於post和get的區別的分析的鏈結 在講區別前先講一下 requestbody。requestbody主要用來接收前端傳遞...
在http請求中,get和post有什麼區別
世界上並沒有完美的程式,但是我們並不因此而沮喪,因為寫程式就是乙個不斷追求完美的過程。get?post?在做 開發時,大家經常會使用http的get與post方法,但是這兩個method有什麼區別呢?在說區別之前,大家要明白一點,get和post都是基於http協議的,所以本質上是一致的。因此區別是...
HTTP中get和post區別
記得剛開始學習web技術的時候老師教我們的get和post區別是什麼 1.get用於獲取資料 post用於提交資料 2.get攜帶的資料大小比post少 3.get不安全 post安全 當開始找工作的時候面試官問我這倆的區別的時候我很自信的重複了之前老師講的區別 面試官問 除了get和post還有其...