首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

HTTP 請求頭字段完整解讀:從 Accept 到 Connection 的深度指南

     編輯:PHP 相關知識

實戰請求頭樣本

Accept-Language: zh-cn,zh;q=0.5
Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; example.com)
Host: example.com
Connection: Keep-Alive

逐字段深度解析

1. Accept-Language:語言偏好

Accept-Language: zh-cn,zh;q=0.5
  • zh-cn:簡體中文(中國大陸)
  • zh:通用中文
  • q=0.5:權重係數(0-1),zh-cn 默認 q=1,優先級更高

服務端可據此返回本地化內容,如多語言站點的語言協商。

2. Accept-Charset:字符集偏好

Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
  • GB2312:中國國家標準簡體中文字符集(默認 q=1,最高優先級)
  • utf-8:Unicode 變長編碼(q=0.7)
  • *:任意字符集(q=0.7,但顯式列出的優先)

現代 Web 應統一輸出 UTF-8,忽略此頭或作為兼容參考。

3. Accept:媒體類型偏好

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
類型含義q值
text/htmlHTML 文檔1.0
application/xhtml+xmlXHTML 文檔1.0
application/xmlXML 文檔0.9
*/*任意類型0.8

MIME 結構:type/subtype。text/* 文本類,application/* 應用/二進制類。服務端應根據此頭決定響應格式(HTML vs JSON vs XML)。

4. Accept-Encoding:內容編碼支持

Accept-Encoding: gzip, deflate
  • gzip:GNU zip,最通用的壓縮格式
  • deflate:LZ77 + Huffman 編碼的無損壓縮算法
  • 現代還有 br (Brotli)、zstd,壓縮比更高

服務端檢測此頭決定是否壓縮響應體,Content-Encoding: gzip 回應。

5. User-Agent:客戶端身份標識

User-Agent: Mozilla/5.0 (compatible; example.com)
  • Mozilla/5.0:歷史兼容前綴,幾乎所有瀏覽器都帶
  • compatible:聲明兼容模式
  • 包含:瀏覽器名/版本、渲染引擎、OS、CPU、語言、插件等

用途:統計分析、兼容性適配、爬蟲識別、設備類型判斷(移動端/PC)。不可信任,易偽造。

6. Host:目標主機

Host: example.com

HTTP/1.1 必須頭。虛擬主機環境下,服務端據此路由到正確站點。包含端口時格式:Host: example.com:8080。

7. Connection:連接管理

Connection: Keep-Alive
  • Keep-Alive:持久連接,複用 TCP 連接傳輸多個請求/響應,減少握手開銷
  • close:單次請求後關閉
  • HTTP/1.1 默認 Keep-Alive,HTTP/1.0 需顯式聲明

常見請求頭速查表

頭字段作用典型值
Accept可接受媒體類型text/html, application/json
Accept-Charset可接受字符集utf-8, iso-8859-1
Accept-Encoding可接受壓縮編碼gzip, deflate, br
Accept-Language可接受自然語言zh-CN, zh;q=0.9, en;q=0.8
Authorization認證憑據Bearer <token>, Basic <base64>
Cache-Control緩存控制指令no-cache, max-age=3600
Cookie攜帶 Cookiesession_id=abc; pref=dark
If-Modified-Since條件請求:修改時間Wed, 21 Oct 2015 07:28:00 GMT
If-None-Match條件請求:ETag"abc123"
Referer來源頁面 URLhttps://google.com/search?q=php
User-Agent客戶端標識Mozilla/5.0...
X-Forwarded-For代理鏈原始客戶端 IP203.0.113.195
X-Requested-WithAJAX 請求標識XMLHttpRequest

常見響應頭速查表

頭字段作用典型值
Location重定向目標/login (配合 302)
Content-Encoding響應體壓縮格式gzip
Content-Length響應體字節長度1234
Content-Type響應媒體類型text/html; charset=utf-8
Last-Modified資源最後修改時間Wed, 21 Oct 2015 07:28:00 GMT
ETag資源實體標籤"abc123" / W/"weak"
Set-Cookie設置 Cookiesid=abc; Path=/; HttpOnly; Secure
Cache-Control緩存策略public, max-age=3600
Expires過期時間(HTTP/1.0)Wed, 21 Oct 2015 07:28:00 GMT
Refresh定時刷新/重定向5; url=/dashboard
Content-Disposition下載文件名建議attachment; filename="report.pdf"
Strict-Transport-SecurityHSTS 強制 HTTPSmax-age=31536000
Access-Control-Allow-OriginCORS 允許源https://app.example.com

緩存控制三大頭組合

Expires: 0
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache

兼容 HTTP/1.0 (Pragma/Expires) 與 HTTP/1.1 (Cache-Control),確保絕不緩存敏感頁面(登錄、支付、個人信息)。

總結

HTTP 頭字段是客戶端與服務端協商的語言。精通請求/響應頭的語義、優先級、交互邏輯,是構建高性能、安全、可觀測 Web 服務的基礎能力。建議配合瀏覽器 DevTools Network 面板、curl -v、Wireshark 實戰觀察分析。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved