HTTP 请求头与响应头速查

6 个速查板块 · 关联 6 款站内工具 · 数据最后核对 2026-10-05

缓存怎么设、跨域怎么放行、哪些安全头必须加、Cookie 该带什么属性——最常用的头部字段按用途分成四组对照。

HTTP 头部字段是请求和响应里附带的一小段元信息,决定了浏览器要不要缓存、跨域能不能过、页面能不能被内嵌、Cookie 会不会被脚本读到。它们不像状态码那样一眼能看出结果,配错了往往表现为「时好时坏」或「本地正常线上不对」。

这篇按用途把最常用的字段分成四组:缓存控制、跨域、安全、内容协商与身份。每一组都给出推荐取值,最后列出四个最容易配错的地方——尤其是 no-cache 和 no-store 的区别,以及 CORS 里通配符与凭证不能共存这两条。

1缓存控制:强缓存与协商缓存

浏览器缓存由两类机制组成:强缓存(在有效期内直接用本地副本,不发请求)和协商缓存(每次都问服务器「变了吗」,没变就返回 304 省流量)。Cache-Control 是现在的主力字段,Expires 是它的老前辈。

字段取值示例作用
Cache-Controlmax-age=31536000, immutable强缓存时长(秒)。静态资源配合文件名哈希可设一年
Cache-Controlno-cache每次使用前都要回源校验,仍会存副本。入口 HTML 常用
Cache-Controlno-store完全不缓存,任何副本都不留。含敏感信息的响应必须用它
ETag"a1b2c3"内容指纹,配合请求头 If-None-Match 做协商缓存
Last-ModifiedSun, 05 Oct 2026 08:00:00 GMT文件最后修改时间,配合 If-Modified-Since 做协商缓存
ExpiresHTTP 日期格式老式强缓存字段,已被 Cache-Control 取代
VaryAccept-Encoding告知缓存按哪些请求头区分版本,压缩内容必须带它

一句话记法:no-cache 是「用前先问」,no-store 才是「完全不留」。这两个名字起得有误导性,是缓存配错的第一大来源。

2跨域(CORS)相关字段

跨域请求能不能通过,取决于服务端返回的 Access-Control-Allow-* 系列响应头。非简单请求(如带自定义头、发 JSON、用 PUT/DELETE)会先发一次 OPTIONS 预检请求,预检通过了才发真实请求。

字段方向说明
Origin请求标记请求来源,由浏览器自动添加,脚本改不了
Access-Control-Allow-Origin响应允许的来源。带 Cookie 时必须回显具体来源,不能写 *
Access-Control-Allow-Credentials响应是否允许携带凭证(Cookie、Authorization)
Access-Control-Allow-Methods响应预检响应中声明允许的请求方法
Access-Control-Allow-Headers响应预检响应中声明允许的自定义请求头
Access-Control-Max-Age响应预检结果缓存多少秒,减少 OPTIONS 请求次数

OPTIONS 预检本身必须返回 2xx 并带上正确的 Allow-* 头,否则浏览器直接拦截,业务代码根本没机会执行——这也是「本地测试正常、线上跨域失败」最常见的原因。

3安全相关响应头

这几个字段不解决业务问题,但能挡掉一整类攻击。它们全部由服务端下发,前端改不了。新站点建议至少配置前三项。

字段推荐取值防什么
Strict-Transport-Securitymax-age=31536000强制浏览器后续只用 HTTPS 访问(HSTS)
Content-Security-Policydefault-src 'self'限制脚本、样式、图片的加载来源,缓解 XSS
X-Content-Type-Optionsnosniff禁止浏览器猜测 MIME 类型,避免把上传文件当脚本执行
X-Frame-OptionsDENY 或 SAMEORIGIN防止页面被其他站点用 iframe 内嵌(点击劫持)
Referrer-Policystrict-origin-when-cross-origin控制跳转时 Referer 泄露多少信息
Permissions-Policygeolocation=(), camera=()按需关闭浏览器特性,减少被滥用的面

4内容协商与身份字段

这一组决定「传的是什么、要什么、以什么身份」。其中 Content-Type 与 Accept 的区分、charset 的位置,是接口联调时最常被问到的问题。

字段方向说明
Content-Type两者请求/响应体的媒体类型,如 application/json; charset=utf-8
Accept请求客户端期望的响应格式
Accept-Encoding / Content-Encoding两者压缩协商,常见取值 gzip、br
Accept-Language请求期望的语言,用于多语言站点
Authorization请求认证凭证,如 Bearer <token>
Cookie / Set-Cookie请求 / 响应会话状态的读写两端
User-Agent请求客户端标识,用于兼容与统计
Location响应配合 3xx 状态码或 201 指出目标地址

5Cookie 的六个属性

Cookie 由服务端通过 Set-Cookie 下发,属性决定了它的安全边界和生命周期。其中 HttpOnly、Secure、SameSite 三项直接关系到账户安全,建议默认全开。

HttpOnly
禁止 JavaScript 读取该 Cookie,能有效防止 XSS 攻击窃取会话。存放登录态的 Cookie 必须加
Secure
仅通过 HTTPS 传输,防止在明文链路上被截获
SameSite
控制跨站请求是否携带。Lax 是当前浏览器默认值;Strict 最严;None 必须同时加 Secure
Domain / Path
限定 Cookie 的生效范围。Domain 设得过宽会把 Cookie 暴露给不相关的子域
Max-Age / Expires
有效期。都不设置时为会话 Cookie,关闭浏览器即失效
前缀 __Host- / __Secure-
Cookie 名称前缀,强制浏览器校验 Secure 与 Path 条件,是额外的加固手段

6四个最容易配错的地方

no-cache ≠ 不缓存
它要求每次使用前回源校验,副本仍然会存;真正「完全不存」的是 no-store。把含敏感信息的接口配上 no-cache,本地磁盘上依然留有明文副本,这是常见的认知错误。
CORS 通配符与凭证不能共存
当请求携带 Cookie 时,Access-Control-Allow-Origin 必须回显具体来源,写 * 会被浏览器直接拒绝。这一条在「一个接口给多个前端用」时最容易踩。
预检请求失败不在业务代码里
OPTIONS 预检由浏览器发起、框架或网关处理。如果预检返回 404 / 405,或没带 Allow-* 头,真实请求根本不会发出——排查时要看 Network 面板里的 OPTIONS 那一条,而不是业务请求。
HSTS 下发后很难撤销
浏览器在 max-age 有效期内会强制用 HTTPS 访问该域名,一旦证书出问题或配置错误,用户连降级到 HTTP 的机会都没有。上线前先用较短的 max-age(如 300 秒)验证,确认无误再逐步加长。

关于「HTTP 请求头与响应头速查」的常见问题

Cache-Control 的 no-cache 和 no-store 到底差在哪?

no-cache 表示「每次使用缓存前必须先向服务器校验」,本地仍然会存副本,只是不直接用;no-store 表示「完全不要缓存,任何副本都不要留」。所以含密码、验证码、个人隐私的响应应该用 no-store;而入口 HTML 想保证用户拿到最新版本、又不想每次都完整下载,用 no-cache 更合适。

为什么设置了 CORS 响应头还是报跨域错误?

按顺序检查四点:一是有没有带凭证(带 Cookie 时 Allow-Origin 不能是 *);二是有没有在 Allow-Headers 里列出实际发送的自定义头;三是 OPTIONS 预检是否返回了 2xx 且带 Allow-* 头;四是缓存——旧的预检结果可能被 Max-Age 缓存住,改完配置要清缓存或临时把 Max-Age 设小。排查时以浏览器控制台的原始报错为准,它通常会直接指出是哪一项不匹配。

HSTS 配置错了会导致网站打不开吗?

会。HSTS 生效后,浏览器在 max-age 有效期(最长可到两年)内强制对该域名使用 HTTPS,无法手动降级到 HTTP。如果此时证书过期、配置出错,用户会直接看到证书错误且无法绕过。所以顶配套路是:先设 max-age=300 验证,确认全站 HTTPS 与证书续期都正常,再逐步提高到一个月、一年,并考虑是否加 includeSubDomains(加了会同时覆盖所有子域,风险更高)。

HttpOnly 能从前端用 JavaScript 设置吗?

不能。HttpOnly、Secure、SameSite 这些安全属性只能由服务端通过 Set-Cookie 响应头下发,前端用 document.cookie 写入的 Cookie 无法带上这些属性。这也意味着前端纯 JS 方案(如把 token 存 localStorage)天然不具备 HttpOnly 的保护——这也是把登录态放在 HttpOnly Cookie 里更安全的原因。

内容标识:本页内容由人工智能辅助生成,并经人工核对与编辑。详见 人工智能生成内容标识说明。
内容说明:本页速查数据由本站自行整理,事实性内容以对应官方规范与文档为准,未复制第三方速查表或百科的表述。数据最后核对日期:2026-10-05。若发现错误或已更新的标准,欢迎通过页脚反馈入口告知。