HTTP 協定的 Header 是一塊資料區域,分為請求頭和響應頭兩種型別,用戶端向服務區傳送請求時帶的是請求頭,而伺服器響應用戶端資料時帶的是響應頭。
請求頭裡主要是用戶端的一些基礎資訊,UA(user-agent)就是其中的一部分,而響應頭裡是響應資料的一些資訊,以及伺服器要求用戶端如何處理這些響應資料的指令。請求頭裡面的關鍵資訊如下:
1) accept
表示當前瀏覽器可以接受的檔案型別,假設這裡有 image/webp,表示當前瀏覽器可以支援 webp 格式的圖片,那麼當伺服器給當前瀏覽器下發 webp 的圖片時,可以更省流量。
2) accept-encoding
表示當前瀏覽器可以接受的資料編碼,如果伺服器吐出的資料不是瀏覽器可接受的編碼,就會產生亂碼。
3) accept-language
表示當前使用的瀏覽語言。
4) Cookie
很多和使用者相關的資訊都存在 Cookie 裡,使用者在向伺服器傳送請求資料時會帶上。例如,使用者在一個網站上登入了一次之後,下次存取時就不用再登入了,就是因為登入成功的 token 放在了 Cookie 中,而且隨著每次請求傳送給伺服器,伺服器就知道當前使用者已登入。
5) user-agent
表示瀏覽器的版本資訊。當伺服器收到瀏覽器的這個請求後,會經過一系列處理,返回一個封包給瀏覽器,而響應頭裡就會描述這個封包的基本資訊。
響應頭裡的關鍵資訊有:
1) content-encoding
表示返回內容的壓縮編碼型別,如“Content-Encoding :gzip”表示這次回包是以 gzip 格式壓縮編碼的,這種壓縮格式可以減少流量的消耗。
2) content-length
表示這次回包的資料大小,如果資料大小不匹配,要當作例外處理。
3) content-type
表示資料的格式,它是一個 HTML 頁面,同時頁面的編碼格式是 UTF-8,按照這些資訊,可以正常地解析出內容。content-type 為不同的值時,瀏覽器會做不同的操作,如果 content-type 是 application/octet-stream,表示資料是一個二進位制流,此時瀏覽器會走下載檔案的邏輯,而不是開啟一個頁面。
4) set-cookie
伺服器通知瀏覽器設定一個 Cookie;通過 HTTP 的 Header,可以識別出使用者的一些詳細資訊,方便做更客製化化的需求,如果大家想探索自己發出的請求中頭裡面有些什麼,可以這樣做:開啟 Chrome 瀏覽器並按“F12”鍵,喚起 Chrome 開發者工具,選擇 network 這個 Tab,瀏覽器發出的每個請求的詳情都會在這裡顯示。