get與post的區別

2021-10-10 18:38:38 字數 2263 閱讀 6493

http請求可以使用多種請求方法。

http1.0定義了三種請求方法: get, post 和 head方法。

http1.1新增了五種請求方法:options, put, delete, trace 和 connect 方法。

http2.0 新的二進位制格式(binary format),http1.x的解析是基於文字。基於文字協議的格式解析存在天然缺陷,文字的表現形式有多樣性,要做到健壯性考慮的場景必然很多,二進位制則不同,只認0和1的組合。基於這種考慮http2.0的協議解析決定採用二進位制格式,實現方便且健壯。

多路復用(multiplexing),即連線共享,即每乙個request都是是用作連線共享機制的。乙個request對應乙個id,這樣乙個連線上可以有多個request,每個連線的request可以隨機的混雜在一起,接收方可以根據request的 id將request再歸屬到各自不同的服務端請求裡面。

header壓縮,如上文中所言,對前面提到過http1.x的header帶有大量資訊,而且每次都要重**送,http2.0使用encoder來減少需要傳輸的header大小,通訊雙方各自cache乙份header fields表,既避免了重複header的傳輸,又減小了需要傳輸的大小。

http協議最常見的兩種方法get和post,這幾點答案其實有幾點並不準確

get和post誤區

針對上面常見的區別,如果面試的時候這麼說,肯定是有很大的毛病,剛在學校面試的時候也曾經囫圇吞棗地這樣說過,現在回過頭再想以前的錯誤認知,又有許多新的認識。

「用處:get常用於取回資料,post用於提交資料」

請求引數

get是querystring(僅支援urlencode編碼),post是放在body(支援多種編碼)

query引數是url的一部分,而get、post等是請求方法的一種,不管是哪種請求方法,都必須有url,而url的query是可選的,可有可無。

「請求引數長度限制:get請求長度最多1024kb,post對請求資料沒有限制」

這句話看上去實在沒毛病啊,菜鳥教程也是這樣說的啊。雖然字面意思上沒有錯誤,但是理解一定要正確。我想說的是get方法提交的url引數資料大小沒有限制,在http協議中沒有對url長度進行限制(不僅僅是querystring的長度),這個限制是特定的瀏覽器及伺服器對他的限制

下面就是對各種瀏覽器和伺服器的最大處理能力做一些說明

所以為了符合所有標準,url的最好不好超過最低標準的2083個字元(2k+35)。當然在做客戶端程式時,url並不展示給使用者,只是個程式呼叫,這時長度只收web伺服器的影響了。對於中文的傳遞,乙個漢字最終編碼後的字元長度是9個字元。

「post比get安全性要高」

這裡的安全是相對性,並不是真正意義上的安全,通過get提交的資料都將顯示到url上,頁面會被瀏覽器快取,其他人檢視歷史記錄會看到提交的資料,而post不會。另外get提交資料還可能會造成csrf攻擊。

這一點理解起來還是有一定難度的,實際上,不論哪一種瀏覽器,在傳送 post 的時候都沒有帶 expect 頭,server 也自然不會發 100 continue。通過抓包發現,儘管會分兩次,body 就是緊隨在 header 後面傳送的,根本不存在『等待伺服器響應』這一說。

從另乙個角度說,tcp 是傳輸層協議。別人問你應用層協議裡的 get 和 post 有啥區別,你回答說這倆在傳輸層上傳送資料的時候不一樣,確定別人不抽你?

參考資料:

301 moved permanently:

所請求的頁面已經轉移至新的url

302 found:

所請求的頁面已經臨時轉移至新的url。

303 see other:

所請求的頁面可在別的url下被找到。

304 not modified:

未按預期修改文件。客戶端有緩衝的文件並發出了乙個條件性的請求(一般是提供if-modified-since頭表示客戶只想比指定日期更新的文件)。伺服器告訴客戶,原來緩衝的文件還可以繼續使用。

305 use proxy:

客戶請求的文件應該通過location頭所指明的**伺服器提取。

306 unused:

此**被用於前一版本。目前已不再使用,但是**依然被保留。

307 temporary redirect:

被請求的頁面已經臨時移至新的url。

Get與Post的區別

1.href與action的區別 href只能get引數,action能get引數又能post引數 href一般用於單個連線,可以帶引數 url重寫 是採用get方式請求的,在位址列中可以看到所有的引數 action一樣用於表單的提交 如 註冊 等,他可以提交大量和比較複雜的引數,可通過post和g...

Get 與Post 的區別

get 與post 的區別 表單提交中get和post方式的區別有5點 1.get是從伺服器上獲取資料,post是向伺服器傳送資料。2.get是把引數資料佇列加到提交表單的action屬性所指的url中,值和表單內各個字段一一對應,在url中可以看到。post是通過http post機制,將表單內各...

get 與 post 的區別

先簡單的介紹一下 get與 post lget 是以實體的方式得到由請求 uri所指定資源的資訊,如果請求 uri只是乙個資料產生過程,那麼最終要在響應實體中返回的是處理過程的結果所指向的資源,而不是處理過程的描述。l post 用來向目的伺服器發出請求,要求它接受被附在請求後的實體,並把它當作請求...