HTTP 頭(HTTP Header)是 HTTP 請求/響應中用于傳遞元數據的關鍵部分,分為 請求頭(Request Header)、響應頭(Response Header)、通用頭(General Header) 和 實體頭(Entity Header) 四大類(注:HTTP/2 后對分類做了簡化,但核心字段功能不變)。它們就像“數據的說明書”,告訴客戶端/服務器如何處理本次請求或響應。
一、通用頭(General Headers)
適用于 請求和響應,傳遞通用的元數據,與具體業務邏輯無關。
字段名 | 作用說明 | 示例 |
| 控制緩存策略(客戶端/服務器如何緩存數據) |
|
| 控制連接狀態(是否保持長連接) |
|
| 表示請求/響應發送的時間(GMT 格式) |
|
| 表示數據的傳輸編碼方式(如分塊傳輸) |
|
| 提議將當前協議升級為其他協議(如 HTTP/1.1 升級到 WebSocket) |
|
| 記錄請求經過的代理/網關(追蹤請求路徑) |
|
二、請求頭(Request Headers)
由 客戶端(瀏覽器/APP) 發送給服務器,包含請求的細節(如身份、期望的響應格式、請求來源等)。
字段名 | 作用說明 | 示例 |
| 指定請求的目標服務器域名和端口(HTTP/1.1 必需字段,用于虛擬主機識別) |
|
| 標識客戶端的類型(瀏覽器/系統/APP 版本),服務器據此返回適配內容 |
|
| 客戶端能接受的響應數據格式(MIME 類型),服務器據此返回對應格式 |
|
| 客戶端支持的壓縮算法(如 gzip、br),服務器用對應算法壓縮響應以節省帶寬 |
|
| 客戶端期望的響應語言(如中文、英文),服務器據此返回多語言內容 |
|
| 攜帶身份認證信息(如 Token、Basic 認證),用于權限校驗 |
|
| 客戶端存儲的 Cookie 數據(服務器之前通過 |
|
| 標識當前請求的來源頁面(即“從哪個頁面跳過來的”),用于防盜鏈、統計 |
|
| 標識請求的來源域名(僅跨域請求時攜帶,不含路徑),用于 CORS 跨域校驗 |
|
| 客戶端發送的請求體數據格式(僅 POST/PUT 等帶請求體的方法需要) |
|
| 客戶端發送的請求體數據長度(字節數),服務器據此判斷數據是否接收完整 |
|
| 記錄請求經過的客戶端真實 IP(多層代理場景下,第一個值為真實 IP) |
|
| 標識請求是否為 AJAX 請求(前端框架如 jQuery/Vue 會自動添加) |
|
三、響應頭(Response Headers)
由 服務器 發送給客戶端,包含響應的處理規則(如Cookie設置、跨域允許、響應格式等)。
字段名 | 作用說明 | 示例 |
| 響應狀態碼(核心字段,標識請求是否成功) |
|
| 標識服務器的軟件類型(如 Apache、Nginx),可自定義隱藏以提高安全性 |
|
| 服務器向客戶端下發 Cookie(可設置過期時間、域名、路徑、HttpOnly 等屬性) |
|
| 跨域請求時,允許訪問的客戶端域名(解決跨域問題) |
|
| 跨域請求時,允許的 HTTP 方法(如 GET/POST/PUT) |
|
| 跨域請求時,是否允許攜帶 Cookie(需與前端 |
|
| 服務器返回的響應體數據格式(MIME 類型),客戶端據此解析(如渲染頁面、解析JSON) |
|
| 服務器對響應體的壓縮算法(與客戶端 |
|
| 服務器返回的響應體數據長度(字節數),客戶端據此判斷數據是否接收完整 |
|
| 重定向地址(僅配合 3xx 狀態碼使用,如 301 永久重定向、302 臨時重定向) |
|
| 頁面自動刷新/跳轉(秒數后執行) |
|
| 資源的唯一標識(用于緩存校驗,如“資源是否被修改”) |
|
| 資源最后修改的時間(用于緩存校驗,與客戶端 |
|
四、實體頭(Entity Headers)
用于描述 請求體/響應體(實體數據) 的元數據(如數據類型、長度、編碼、語言等),部分字段已與請求頭/響應頭重疊(如 Content-Type
、Content-Length
),HTTP/2 后更強調“與實體相關的頭”而非單獨分類。
常見實體頭(已在上述分類中覆蓋):
Content-Type
:實體數據格式Content-Length
:實體數據長度Content-Encoding
:實體數據壓縮算法Content-Language
:實體數據的語言(如Content-Language: zh-CN
)Expires
:實體數據的過期時間(緩存用,優先級低于Cache-Control
)
五、關鍵補充:自定義頭(X-* 頭)
除了標準頭,開發者還可以自定義頭,通常以 X-
開頭(如 X-User-ID
、X-Request-Trace-ID
),用于傳遞業務自定義的元數據(如用戶ID、請求追蹤ID)。
示例:
- 客戶端請求頭:
X-User-ID: 1001
(傳遞當前用戶ID) - 服務器響應頭:
X-Trace-ID: abc-123-def
(傳遞請求追蹤ID,用于排查問題)
總結
HTTP 頭的核心作用是 “傳遞上下文”:
- 客戶端通過請求頭告訴服務器“我是誰、我要什么、我能處理什么”;
- 服務器通過響應頭告訴客戶端“請求結果如何、我返回了什么、你該怎么處理”。
日常開發中,常見問題(如跨域、緩存、參數解析錯誤)大多與 HTTP 頭配置相關(例如跨域問題需檢查 Access-Control-*
頭,POST 參數拼URL需檢查 Content-Type
頭)。