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?

去反馈
站长的博客
提个建议