Google Chrome瀏覽器對HTTP請求的編碼行為


 2020-01-29更正:在實際開發過程中發現,不同瀏覽器對HTTP請求的編碼行為存在差異本文標題更名為 Google Chrome瀏覽器對HTTP請求的編碼行為” ,本文內容僅以谷歌瀏覽器為參考基礎,研究思考瀏覽器對HTTP請求的編碼行為。因不同瀏覽器的差異,以下內容並不是適用於所有瀏覽器,請讀者知悉。

 

Google Chrome瀏覽器會對請求的URL中非ASCII碼字符進行編碼。這里不是指對整個URL進行編碼,而是僅僅對非ASCII碼字符部分進行編碼,詳情請看下面的實驗記錄。

  • 實驗一:在URL參數Name中輸入中文 “哈哈”,在Fiddler中抓取的請求中“哈哈”被編碼成了“%e5%93%88%e5%93%88” 

http://localhost:27713/MyIndex.aspx?Name=哈哈

  • 實驗二:將URL中的 “MyIndex”替換成中文 “哈哈”,參數Name中輸替換成剛才被編碼過的中文 “哈哈”。從Fiddler抓到的請求中可以看到中文 “哈哈”被編碼了,但“%e5%93%88%e5%93%88”仍保持不變。如果它被編碼了(即中文“哈哈”被編碼兩次),它應該長這樣“%25e5%2593%2588%25e5%2593%2588”  。由此可以得出,Google Chrome瀏覽器僅對URL中的非ASCII碼字符進行編碼而已

http://localhost:27713/哈哈.aspx?Name=%e5%93%88%e5%93%88

 

 

HTTP服務器在接收到這樣的請求時,會對URL中轉義的字符進行解碼,請看下面實驗三。

  • 實驗三:抓的請求 Name=%e5%93%88%e5%93%88,但在程序里獲取參數Name時是已被解碼還原成中文“哈哈”

 

但是,HTTP協議中並沒有指定使用何種編碼和字符集來解釋URL中的非ASCII字符,因此,否能成功解析完全取決於URL中非ASCII內容的編碼是否與 HTTP服務器的解析編碼一致。

 

瀏覽器對POST請求相關的編碼行為

對於POST請求,表單中的參數值是通過request body發送給服務器,此時瀏覽器會根據頁面 Content-Type 指定的字符集對表單數據進行編碼,然后再將表單數據發送給服務器。服務器收到請求后會對表單數據進行解碼。因為編碼、解碼是由瀏覽器和服務器完成的,所以開發人員一般是感覺不到這個過程的。但你可以通過下面的實驗截圖,直觀的感受這個編解碼過程。

  • 步驟一:填寫表單,提交請求。

 

  •  步驟二:抓取請求,確認用戶名被編碼。

 

  • 步驟三:在程序后台獲取被服務器解碼后的用戶名。

 

參考引用:

https://blog.csdn.net/happy_wuyuqing/article/details/8144830

https://www.cnblogs.com/haitao-fan/p/3399018.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM