關於http請求

2021-06-27 05:32:29 字數 1019 閱讀 2416

前段時間和同事爭論為什麼需要給ajax的請求引數加encode,我說因為中文會亂碼。同事問:post呢?!

還真沒研究過ajax的post請求,只知道用ajax的時候post也是傳遞的字串,長得和get一樣 name=***&***=***這樣,所以就要encodeuri嗎?

先看jquery的$.ajax,檢視原始碼 如果ajax傳遞的data是字串,ajax本身並不會對其進行編碼,如果是其它的就會,不分post和get,這樣就可以證明post本質和get一樣嗎?

其實不然:

通過檢視ajax在w3c的官方定義,我發現,ajax的 post請求預設是utf-8傳輸的!!!

而form表單的post通過chrome抓請求可以看到,自動對欄位進行了encode!!

就是說 如果post請求,中文會亂碼是站不住的!而且通過自己寫的jsp**測試,的確如此,post請求無論是原生form還是ajax傳輸,如果中文都不用收到去urlencode。

那麼問題來了?為什麼使用上面大家都會encode呢?大家都傻嗎?

其實原因並不是因為中文會亂碼是因為特殊符號!比如& = 這種會影響後端解析key value 所以會對value裡面出現的&符號編碼。

-------------------------------分割線----------------------------

上面只說的是post,get請求是需要編碼的,中文會亂碼以及特殊符號影響後端解析兩個問題都存在

結論:無論get還是post請求,都需要編碼,後端都需要解碼。

再補乙個jquery ajax的問題,ajax如果是get請求,在ie下面會有cache的可能,需要手動加入 cache:false來去除快取的影響,或者在引數中傳乙個隨機數/時間戳

post請求不會有快取(瀏覽器行為)不用care

關於 HTTP請求頭概述

http客戶程式 例如瀏覽器 向伺服器傳送請求的時候必須指明請求型別 一般是get或者post 如有必要,客戶程式還可以選擇傳送其他的請求頭。大多數請求頭並不是必需的,但content length除外。對於post請求來說content length必須出現。下面是一些最常見的請求頭 accept...

關於HTTP請求體格式

網路請求報文包括請求行,請求頭,空行和請求體 下面是請求體的格式 每個配置屬性以 邊界字串 開始,邊界字串必須一樣,不能為中文 接著一行是配置屬性,隔一行是屬性值,必須隔一行 每個配置屬性重啟一行,最後以 字串 結束報文請求體 post請求的時候需要設定 content type 和 content...

關於http請求,請求頭和響應頭

via是http協議裡面的乙個header,記錄了一次http請求所經過的 和閘道器,經過1個 伺服器,就新增乙個 伺服器的資訊,經過2個就新增2個。x cache是squid 的自定義header,用來記錄快取的命中與否 squid 是 linux unix 平台下最為流行的高效能免費應用層 伺服...