面試官:說說 HTTP 常見的請求頭有哪些? 作用?
一、是什麼
HTTP 頭字段(HTTP header fields), 是指在超文本傳輸協議(HTTP)的請求和響應消息中的消息頭部分
它們定義了一個超文本傳輸協議事務中的操作參數
HTTP 頭部字段可以自己根據需要定義,因此可能在 Web
服務器和瀏覽器上發現非標準的頭字段
下面是一個HTTP
請求的請求頭:
GET /home.html HTTP/1.1
Host: developer.mozilla.org
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://developer.mozilla.org/testpage.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT
If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"
Cache-Control: max-age=0
二、分類
常見的請求字段如下表所示:
三、使用場景
通過配合請求頭和響應頭,可以滿足一些場景的功能實現:
協商緩存
協商緩存是利用的是【Last-Modified,If-Modified-Since】
和【ETag、If-None-Match】
這兩對請求頭響應頭來管理的
Last-Modified
表示本地文件最後修改日期,瀏覽器會在 request header 加上If-Modified-Since
(上次返回的Last-Modified
的值),詢問服務器在該日期後資源是否有更新,有更新的話就會將新的資源發送回來
Etag
就像一個指紋,資源變化都會導致ETag
變化,跟最後修改時間沒有關係,ETag
可以保證每一個資源是唯一的
If-None-Match
的 header 會將上次返回的Etag
發送給服務器,詢問該資源的Etag
是否有更新,有變動就會發送新的資源回來
而強制緩存不需要發送請求到服務端,根據請求頭expires
和cache-control
判斷是否命中強緩存
強制緩存與協商緩存的流程圖如下所示:
會話狀態
cookie
,類型爲「小型文本文件」,指某些網站爲了辨別用戶身份而儲存在用戶本地終端上的數據,通過響應頭set-cookie
決定
作爲一段一般不超過 4KB 的小型文本數據,它由一個名稱(Name)、一個值(Value)和其它幾個用於控制 Cookie
有效期、安全性、使用範圍的可選屬性組成
Cookie
主要用於以下三個方面:
-
會話狀態管理(如用戶登錄狀態、購物車、遊戲分數或其它需要記錄的信息)
-
個性化設置(如用戶自定義設置、主題等)
-
瀏覽器行爲跟蹤(如跟蹤分析用戶行爲等
參考文獻
-
https://zh.wikipedia.org/wiki/HTTP 頭字段
-
https://github.com/amandakelake/blog/issues/41
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/LtSTdmJmDSuFZDNtPZ6r-Q