說說 HTTP 常見的請求頭有哪些? 作用?

林恒發表於2024-03-30

說說 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

二、分類

常見的請求欄位如下表所示:

欄位名說明示例
Accept 能夠接受的回應內容型別(Content-Types) Accept: text/plain
Accept-Charset 能夠接受的字符集 Accept-Charset: utf-8
Accept-Encoding 能夠接受的編碼方式列表 Accept-Encoding: gzip, deflate
Accept-Language 能夠接受的回應內容的自然語言列表 Accept-Language: en-US
Authorization 用於超文字傳輸協議的認證的認證資訊 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control 用來指定在這次的請求/響應鏈中的所有快取機制 都必須 遵守的指令 Cache-Control: no-cache
Connection 該瀏覽器想要優先使用的連線型別 Connection: keep-alive Connection: Upgrade
Cookie 伺服器透過 Set- Cookie (下文詳述)傳送的一個 超文字傳輸協議Cookie Cookie: $Version=1; Skin=new;
Content-Length 以 八位位元組陣列 (8位的位元組)表示的請求體的長度 Content-Length: 348
Content-Type 請求體的 多媒體型別 Content-Type: application/x-www-form-urlencoded
Date 傳送該訊息的日期和時間 Date: Tue, 15 Nov 1994 08:12:31 GMT
Expect 表明客戶端要求伺服器做出特定的行為 Expect: 100-continue
Host 伺服器的域名(用於虛擬主機 ),以及伺服器所監聽的傳輸控制協議埠號 Host: en.wikipedia.org:80 Host: en.wikipedia.org
If-Match 僅當客戶端提供的實體與伺服器上對應的實體相匹配時,才進行對應的操作。主要作用時,用作像 PUT 這樣的方法中,僅當從使用者上次更新某個資源以來,該資源未被修改的情況下,才更新該資源 If-Match: "737060cd8c284d8af7ad3082f209582d"
If-Modified-Since 允許在對應的內容未被修改的情況下返回304未修改 If-Modified-Since: Sat, 29 Oct 1994 19:43:31 GMT
If-None-Match 允許在對應的內容未被修改的情況下返回304未修改 If-None-Match: "737060cd8c284d8af7ad3082f209582d"
If-Range 如果該實體未被修改過,則向我傳送我所缺少的那一個或多個部分;否則,傳送整個新的實體 If-Range: "737060cd8c284d8af7ad3082f209582d"
Range 僅請求某個實體的一部分 Range: bytes=500-999
User-Agent 瀏覽器的瀏覽器身份標識字串 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20100101 Firefox/21.0
Origin 發起一個針對 跨來源資源共享 的請求 Origin: http://www.example-social-network.com

三、使用場景

透過配合請求頭和響應頭,可以滿足一些場景的功能實現:

協商快取

協商快取是利用的是【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是否有更新,有變動就會傳送新的資源回來

而強制快取不需要傳送請求到服務端,根據請求頭expirescache-control判斷是否命中強快取

會話狀態

cookie,型別為「小型文字檔案」,指某些網站為了辨別使用者身份而儲存在使用者本地終端上的資料,透過響應頭set-cookie決定

作為一段一般不超過 4KB 的小型文字資料,它由一個名稱(Name)、一個值(Value)和其它幾個用於控制 Cookie有效期、安全性、使用範圍的可選屬性組成

Cookie 主要用於以下三個方面:

  • 會話狀態管理(如使用者登入狀態、購物車、遊戲分數或其它需要記錄的資訊)
  • 個性化設定(如使用者自定義設定、主題等)
  • 瀏覽器行為跟蹤(如跟蹤分析使用者行為等

參考文獻

  • https://zh.wikipedia.org/wiki/HTTP頭欄位
  • https://github.com/amandakelake/blog/issues/41

如果對您有所幫助,歡迎您點個關注,我會定時更新技術文件,大家一起討論學習,一起進步。

說說 HTTP 常見的請求頭有哪些? 作用?

相關文章