EasyDebug.NET

HTTP 請求頭 / 響應頭速查表

請求頭、響應頭、緩存、CORS 與安全頭,含踩坑要點

共 71 個頭字段

Host通用

example.com:8080

目標主機與端口,HTTP/1.1 起必填;用於虛擬主機與 TLS SNI 路由

Content-Type通用

application/json; charset=utf-8

報文體的媒體類型與字符集,接口返回亂碼多半是這裡不對

要點: charset 不匹配也會讓瀏覽器按錯誤編碼解析;JSON 統一用 application/json 不帶 charset 最穩

Content-Length通用

1024

報文體字節數(不是字符數),中文一個字常佔 3 字節

Content-Encoding通用

gzip

報文體壓縮算法,常見 gzip、br、zstd;壓縮的是 length 之後的字節

要點: Content-Length 與 Content-Encoding 同時存在時,length 指的是壓縮前的長度

Content-Language通用

zh-Hans

報文體面向的自然語言,多語言站點按此與 Accept-Language 協商

Content-Disposition通用

attachment; filename="report.csv"

控制瀏覽器是內聯展示還是下載,並給出文件名

要點: 中文文件名要用 filename*=UTF-8 形式,只寫 filename 會亂碼

Transfer-Encoding通用

chunked

分塊傳輸;用 chunked 時不能同時寫 Content-Length

要點: 兩個都寫會被網關判定為請求走私,務必只留一個

Connection通用

keep-alive

連接管理,close 表示本次響應後斷開,upgrade 用於協議升級

Keep-Alive通用

timeout=5, max=1000

複用連接的保活參數,空閒超時與最大請求數

Via通用

1.1 varnish

記錄經過的代理與網關,用於排查鏈路與緩存層級

Date通用

Sun, 20 Sep 2026 03:30:00 GMT

報文生成時間,必須是 GMT / 格林尼治標準時間格式

Accept請求頭

text/html,application/json;q=0.9

客戶端可接受的內容類型,可用 q 值表示優先級

要點: 後端按 Accept 返回 406 時,先看這裡與響應的 Content-Type 是否對得上

Accept-Encoding請求頭

gzip, br

客戶端支持的壓縮算法,服務端據此決定是否壓縮

Accept-Language請求頭

zh-CN,zh;q=0.9,en;q=0.8

客戶端偏好的自然語言,多語言站點的語言判定依據

要點: 只按這個頭切語言會讓搜索引擎抓到同一 URL 的不同語言版本,要配 Vary

Accept-Charset請求頭

utf-8

客戶端可接受的字符集,現代瀏覽器基本只報 utf-8

User-Agent請求頭

Mozilla/5.0 (Windows NT 10.0; Win64; x64)

客戶端標識,服務端據此做兼容與風控判斷

要點: 服務端別用它做能力判斷,現代瀏覽器會僞裝,UA 裡已無法區分平板與手機

Referer請求頭

https://example.com/list

來源頁面地址,用於防盜鏈與來源統計

要點: 從 HTTPS 跳到 HTTP 時瀏覽器默認不帶這個頭,防盜鏈會誤傷

Authorization請求頭

Bearer eyJhbGciOi...

認證憑證,常見 Bearer token 與 Basic base64

要點: 401 時先確認請求裡到底帶沒帶這個頭、前綴對不對,Bearer 後必須恰好一個空格

Proxy-Authorization請求頭

Basic dXNlcjpwYXNz

向代理服務器認證,與 Authorization 是兩套東西

要點: 407 要改成這個頭,塞 Authorization 不起作用

Range請求頭

bytes=0-1023

只請求資源的一部分字節,斷點續傳與視頻拖動依賴它

要點: 服務端要回 206 而不是 200,回 200 說明沒支持 Range

Expect請求頭

100-continue

發送大請求體前先問服務端是否接收,避免白傳

要點: 網關不轉發 Expect 時會卡到超時,上傳大文件超時可去掉該頭

Upgrade請求頭

websocket

要求升級協議,WebSocket 握手的關鍵頭

要點: 反向代理要同時轉發 Upgrade 與 Connection: upgrade,否則握手失敗

Forwarded請求頭

for=203.0.113.1;proto=https

標準化的代理鏈路信息,X-Forwarded-* 的正式替代

X-Forwarded-For請求頭

203.0.113.1, 10.0.0.5

原始客戶端 IP 鏈,代理逐跳追加,最左側是客戶端

要點: 客戶端可以僞造這個頭,取真實 IP 只能信任自定義或最後一跳的值

X-Forwarded-Proto請求頭

https

原始請求協議,反代後應用判斷是否 HTTPS 的依據

X-Real-IP請求頭

203.0.113.1

Nginx 常用的單值客戶端 IP 頭,只保留一個地址

Server響應頭

nginx/1.24.0

服務端軟件標識,暴露版本號會給攻擊者省事

要點: 生產環境建議隱藏或只寫 nginx,用 server_tokens off

WWW-Authenticate響應頭

Basic realm="api"

告知客戶端該用哪種認證方式,必須與 401 一起返回

要點: 返回 403 而不是 401 會讓客戶端不知道該彈認證框還是判定無權限

Proxy-Authenticate響應頭

Basic realm="proxy"

代理要求認證,與 407 配套

Location響應頭

https://example.com/new

重定向目標,與 3xx 狀態碼配套使用

要點: 相對路徑在反代與子路徑部署時容易指錯,跨域名必須寫絕對地址

Retry-After響應頭

120

告訴客戶端多久後重試,秒數或 HTTP 日期

要點: 429 與 503 都該帶它,否則客戶端容易立刻重試把服務壓垮

Allow響應頭

GET, POST, HEAD

該資源允許的請求方法,與 405 配套

Accept-Ranges響應頭

bytes

聲明支持範圍請求,斷點續傳的前提

Content-Range響應頭

bytes 0-1023/4096

部分內容的區間與總長度,與 206 配套

X-Powered-By響應頭

Express

框架指紋,建議關掉以減少信息暴露

Timing-Allow-Origin響應頭

*

允許哪些源讀取 Performance 計時數據,跨域測速要用到

Alt-Svc響應頭

h3=":443"; ma=86400

聲明同一資源的其他服務入口,HTTP/3 靠它被發現

Cache-Control緩存與條件

public, max-age=3600

緩存策略總開關,no-store 完全不存,no-cache 要回源校驗

要點: no-cache 不是不緩存,而是每次都要回源校驗;想徹底不存要用 no-store

Expires緩存與條件

Sun, 20 Sep 2026 04:30:00 GMT

HTTP/1.0 的過期時間,優先級低於 Cache-Control

Pragma緩存與條件

no-cache

HTTP/1.0 遺留頭,只為兼容舊客戶端,語義同 no-cache

ETag緩存與條件

"686897696a7c876b7e"

資源版本指紋,條件請求用它判斷內容是否變化

要點: 多臺服務器各算各的 ETag 會導致緩存頻繁失效,集群要關掉或統一算法

Last-Modified緩存與條件

Sat, 19 Sep 2026 12:00:00 GMT

資源最後修改時間,精度只到秒

If-None-Match緩存與條件

"686897696a7c876b7e"

帶上上次的 ETag 問服務端有沒有變,沒變回 304

要點: 協商緩存沒生效時先看瀏覽器實際發的 If-None-Match 與響應 ETag 是否一致

If-Modified-Since緩存與條件

Sat, 19 Sep 2026 12:00:00 GMT

按修改時間做條件請求,精度低但兼容性好

If-Match緩存與條件

"686897696a7c876b7e"

要求資源版本一致才執行寫操作,樂觀鎖的實現方式

要點: 更新接口不帶它會丟更新,配合 412 使用

If-Unmodified-Since緩存與條件

Sat, 19 Sep 2026 12:00:00 GMT

與 If-Match 同理但按時間判斷,條件不滿足回 412

Age緩存與條件

3600

響應在緩存中已存活的秒數,與 max-age 一起判斷是否過期

Vary緩存與條件

Accept-Encoding, Accept-Language

聲明響應隨哪些請求頭變化,緩存必須按這些頭分桶

要點: 漏寫 Vary 會把壓縮版發給不支持壓縮的客戶端,或讓多語言版本互相串

Origin跨域 CORS

https://app.example.com

請求發起方,瀏覽器自動帶上且頁面無法僞造

Access-Control-Allow-Origin跨域 CORS

https://app.example.com

允許的跨域來源,寫 * 就不能再帶憑證

要點: 帶 Cookie 時必須回顯具體來源,回 * 瀏覽器會直接攔掉響應

Access-Control-Allow-Methods跨域 CORS

GET, POST, PUT, DELETE

預檢請求裡允許的方法

Access-Control-Allow-Headers跨域 CORS

Content-Type, Authorization

預檢請求裡允許的自定義請求頭

要點: 自定義頭不在這個列表裡,預檢直接失敗,瀏覽器控制檯只報 CORS 錯誤

Access-Control-Allow-Credentials跨域 CORS

true

是否允許攜帶 Cookie 與認證信息

要點: 設 true 後前端必須同時開 withCredentials,兩邊缺一個都拿不到數據

Access-Control-Expose-Headers跨域 CORS

Content-Disposition

允許前端 JS 讀取的響應頭,默認只能讀少數幾個

要點: 下載文件名拿不到通常就是沒暴露 Content-Disposition

Access-Control-Max-Age跨域 CORS

600

預檢結果可緩存多久,減少 OPTIONS 請求

Access-Control-Request-Method跨域 CORS

PUT

預檢請求裡聲明真正要用的方法,由瀏覽器自動生成

Access-Control-Request-Headers跨域 CORS

Authorization

預檢請求裡聲明真正要用的自定義頭

Strict-Transport-Security安全頭

max-age=63072000; includeSubDomains; preload

強制瀏覽器此後只用 HTTPS 訪問,防降級與 Cookie 劫持

要點: preload 一旦提交到瀏覽器預置列表就很難撤回,先用小 max-age 驗證

Content-Security-Policy安全頭

default-src "self"; object-src "none"

內容安全策略,限定腳本、樣式、圖片等的加載來源,是防 XSS 的主力

要點: 先上 Content-Security-Policy-Report-Only 觀察命中,寫死再切正式頭

X-Frame-Options安全頭

SAMEORIGIN

是否允許被 iframe 嵌套,防點擊劫持

要點: 與 CSP 的 frame-ancestors 同時存在時,後者優先

X-Content-Type-Options安全頭

nosniff

禁止瀏覽器猜類型,防止把文本當腳本執行

Referrer-Policy安全頭

strict-origin-when-cross-origin

控制跳轉時帶出多少來源信息

Permissions-Policy安全頭

camera=(), geolocation=(self)

按功能開關瀏覽器能力,如攝像頭、定位、麥克風

Cross-Origin-Opener-Policy安全頭

same-origin

隔離瀏覽上下文,是啓用高精度計時與 SharedArrayBuffer 的前提

Cross-Origin-Embedder-Policy安全頭

require-corp

要求所有嵌入資源都聲明允許被嵌入

Cross-Origin-Resource-Policy安全頭

same-origin

聲明資源只允許同源頁面加載,防跨站讀取

Clear-Site-Data安全頭

"cache", "cookies"

讓瀏覽器清除本站緩存與 Cookie,退出登錄時常用

要點: 只在 HTTPS 下生效,寫錯引號會靜默失效

X-XSS-Protection安全頭

0

舊瀏覽器的 XSS 過濾器開關,現已廢棄,建議直接設為 0

要點: 設為 1 反而會引入側信道問題,現代做法是刪掉它改用 CSP

這個工具不好用,或者遇到 bug?

去回報
站長的博客
提個建議