“接口返回 200,但页面还是不对”是很常见的一类问题。缓存可能让用户拿到旧内容,Cookie 属性可能让登录状态在某个浏览器里失效,CORS 也可能让浏览器拦住一份服务器已经生成好的响应。此时只看状态码远远不够。把请求或响应头复制出来,按安全、缓存、性能和跨域四条线拆开看,通常比凭感觉改配置更快。HTTP 头部分析工具适合做这一步:它读取你粘贴的头部文本,解析已识别字段,并给出排查线索。

4 条线
安全、缓存、性能与跨域
5 项
默认检查的基础安全头
10 条
浏览器内保留的近期分析记录

HTTP 头到底应该先看什么

一段响应头看起来像一串没有上下文的英文键值对,但每个字段其实都在回答一个具体问题:内容是什么?能不能缓存?浏览器应该怎样限制它?是否允许别的来源读取?传输时有没有压缩?先建立这几个问题,再去看字段,就不会陷在逐行翻译里。

能力排查主题先找这些字段
内容与状态确认响应类型和体积Content-Type、Content-Length、HTTP 状态行
缓存判断旧内容从哪里来Cache-Control、ETag、Last-Modified、Expires
浏览器安全减少嵌入、注入和降级风险CSP、HSTS、X-Frame-Options、X-Content-Type-Options
Cookie确认登录或会话边界Set-Cookie、Secure、HttpOnly、SameSite
跨域与传输解释浏览器为何拦截或等待Access-Control-*、Content-Encoding、Vary
工具分数是排查线索,不是认证结论
HTTP 头部分析工具使用内置规则计算安全和性能参考分数,方便发现缺失字段或明显配置风险。它不等同于渗透测试、合规审计,也不能单凭一段响应头判断整个网站是否安全。最终结论要结合应用逻辑、服务器配置、浏览器行为和实际业务场景复核。

缓存问题:为什么改了内容,用户还看不到

缓存排查最容易出现的误区,是把“有缓存”当成“缓存配置正确”。缓存本身不是问题,问题在于谁可以缓存、能缓存多久、什么时候需要重新验证,以及不同请求是否应该得到不同版本。比如静态文件适合较长时间缓存,但用户资料、购物车或带权限的接口响应,往往不能沿用同一套策略。

Cache-Control是第一站。看到 public、private、no-store 或 max-age 时,先问它是否符合内容的敏感程度和更新频率。ETag 与 Last-Modified 则是缓存验证线索:它们能帮助客户端在再次请求时询问资源有没有变化,但不代表内容一定不会被缓存,也不代表 CDN 一定会按你的预期工作。

  • 页面刚发布却仍是旧版:检查浏览器缓存、CDN 缓存和应用层缓存是否有不同的失效时间。
  • 接口返回了不该共享的数据:重点看是否错误使用了 public,以及响应是否依赖 Cookie、Authorization 或其他请求头。
  • 每次都重新下载大文件:检查是否缺少 Cache-Control,或没有 ETag、Last-Modified 这类验证机制。
  • 缓存结果不稳定:留意 Vary。它会告诉缓存系统哪些请求头会影响响应,配置不当时可能造成命中率下降或版本混用。
不要用一次响应头替代缓存链路排查
同一个 URL 可能经过浏览器、反向代理、CDN 和应用服务多个层次。响应头只反映当前请求拿到的结果;遇到缓存问题时,应记录请求时间、是否登录、请求头和响应头,并在清缓存或切换节点后复测。

安全头:看见缺失字段后,先理解它限制什么

安全头不是勾选清单,添加一个字段也不等于立刻获得完整防护。它们主要是把浏览器的默认行为限制得更明确:哪些脚本可以执行,页面能否被嵌入,是否强制使用 HTTPS,浏览器是否应该猜测内容类型。分析时先看字段存在,再看值是否与页面真实资源相容。

Content-Security-Policy:越严格不一定越适合直接上线

CSP 可以限制脚本、样式、图片、字体和连接来源,是很重要的浏览器安全控制。但如果站点仍依赖内联脚本、第三方统计或动态资源,直接把策略写得过紧,可能让页面功能突然消失。工具会特别提示 unsafe-inline、unsafe-eval 等值得复核的指令;工程上更稳的顺序通常是先收集报告、识别实际资源,再逐步收紧策略。

HSTS、X-Frame-Options 与 nosniff

HSTS 用于告诉浏览器在一段时间内优先使用 HTTPS。工具会把 max-age 小于 31536000 秒的值列为提醒,但这只是当前规则的阈值,不应被理解为所有站点都能无条件照抄。启用较长周期前,要确认 HTTPS、子域名和证书链已经稳定。X-Frame-Options 主要涉及页面是否允许被嵌入,SAMEORIGIN 和 DENY 的取舍要结合业务;X-Content-Type-Options: nosniff 则帮助浏览器不要随意猜测 MIME 类型。

Cookie 与 CORS:最容易“看起来都对”的两组配置

登录问题经常不是登录接口本身报错,而是响应发出的 Cookie 没有按浏览器规则保存或发送。看到 Set-Cookie 时,至少检查 Secure、HttpOnly 和 SameSite。Secure 让 Cookie 只在 HTTPS 下发送,HttpOnly 可以减少客户端脚本直接读取敏感 Cookie 的机会,SameSite 则影响跨站请求时是否携带 Cookie。它们不是越多越好:例如本地开发、跨站登录和嵌入式场景都可能需要不同取舍。

CORS 则要把“服务器愿不愿意让某个来源读取响应”和“请求是否真的发送成功”分开。Access-Control-Allow-Origin: * 对公开资源可能合理,但如果同时允许凭据,浏览器会拒绝这种组合,工具也会将其标记为高风险线索。实际排查时还要看 OPTIONS 预检、允许的方法、允许的请求头以及响应是否真的包含对应的允许来源。只改后端响应头,不一定能解决代理层或预检路由的问题。

能力现象优先检查
登录后刷新又退出Cookie 没保存或没发送Set-Cookie 的 Secure、SameSite、Domain、Path 与 HTTPS
浏览器报跨域响应不允许当前来源读取Allow-Origin、Allow-Credentials 与预检 OPTIONS
页面被第三方嵌入嵌入策略与业务冲突X-Frame-Options 与 CSP 的 frame-ancestors
脚本加载失败资源来源不在允许范围CSP 的 script-src、nonce、hash 与第三方域名

一套上线前和故障时都适用的分析流程

  1. 1
    先保存完整现场
    从浏览器 Network 面板或命令行复制请求/响应头,保留状态码、请求 URL、是否登录、请求方法和时间。不要只抄一两行,因为 Cookie、Vary 和预检信息往往需要上下文。
  2. 2
    粘贴到工具并加载示例对照
    打开 HTTP 头部分析工具,可以先加载示例熟悉输入格式,再粘贴自己的头部。工具会自动解析带冒号的字段,跳过 HTTP 状态行,并把无法识别的字段保留为自定义头。
  3. 3
    先看缺失字段,再看字段值
    先确认安全头、缓存头和压缩头是否出现,再检查值是否合理。缺少 CSP 和存在一个错误的 CSP 是两类问题;有 Cache-Control 和把敏感响应设为 public 也不能混为一谈。
  4. 4
    把建议翻译成一个可验证动作
    不要一次改十项。比如先给静态资源补缓存策略,记录变更前后的响应头和命中情况;或先修正 CORS 的来源与凭据组合,再重新发起预检请求,确认浏览器错误是否消失。
  5. 5
    用相同条件复测并保存报告
    分析结果可以复制或导出 JSON,工具也会在当前页面保留近期历史。把修复前后结果和部署版本放在一起,团队才知道是配置真的改善,还是换了节点、缓存状态或请求条件。
实操案例

一个“接口正常但前端报错”的排查例子

前端请求用户资料接口,服务端日志显示 200,开发者却在浏览器里看到跨域错误。团队第一反应是重写接口,结果问题一直存在。
  1. 1.先复制失败请求和 OPTIONS 预检的响应头,分别记录 Origin、请求方法和自定义请求头。
  2. 2.在工具中检查 Access-Control-Allow-Origin 是否精确匹配当前来源,是否错误使用通配符,以及 Allow-Credentials 是否同时为 true。
  3. 3.如果预检没有通过,先修预检路由的允许方法和允许请求头,再检查真正接口的响应头。
  4. 4.修复后使用同一浏览器、同一来源和同一请求方法复测,并保留前后两份头部作为变更记录。
得到什么:这条路径把“后端返回 200”和“浏览器允许前端读取”分开了。很多跨域问题不需要重写业务接口,而是需要补齐预检和响应阶段的头部。

哪些结论不能只靠 HTTP 头得出

头部分析很适合缩小范围,但它不是完整的安全扫描器,也不是性能监控。看见 Content-Encoding: gzip,只能说明当前响应带有压缩编码,不能直接推出所有资源都压缩;看见 CDN 相关字段,也不能证明每个地区和每个资源都命中了 CDN。类似地,缺少某个安全头是值得检查的信号,但是否能修、应该怎样修,还要看页面架构和兼容性。

如果问题表现为首屏慢、脚本阻塞或资源过大,建议继续用网站性能分析工具看加载指标和资源瀑布;如果表现为大量 404、301 或超时,再用网页链接检查工具逐项确认。需要做更完整的页面技术排查时,可以回到SEO 技术分析工具,把响应头和页面结构放在同一份上线清单里。

工具只是把信息整理得更容易讨论。真正可靠的习惯,是保留原始现场、写清测试条件、一次只改一个变量,并在浏览器和服务器两端都复核。想找更多轻量开发工具,也可以从在线工具集首页继续浏览。

常见问题

HTTP 响应头和请求头有什么区别?

请求头由客户端发给服务器,常见的有 Origin、Cookie、Authorization 和 Accept;响应头由服务器返回,常见的有 Cache-Control、Set-Cookie、Content-Type 和 Content-Security-Policy。跨域和缓存排查通常需要两边一起看,只复制响应头可能漏掉触发问题的请求条件。

Cache-Control 的 max-age 是多少才合适?

没有一个适合所有资源的固定数字。带内容指纹的静态文件通常可以设置更长缓存,频繁变化的 HTML 或个性化接口则应更谨慎。先根据内容是否公开、更新频率和失效机制决定,再用响应头、缓存命中和发布后的复测结果验证。

CORS 的 Access-Control-Allow-Origin 可以写星号吗?

对不需要凭据的公开资源,星号在某些场景可以使用;但如果请求需要 Cookie 或其他凭据,就不能把星号与允许凭据直接组合。更稳妥的做法是明确允许来源,并同时检查 OPTIONS 预检、允许方法和允许请求头。

Set-Cookie 里的 Secure、HttpOnly、SameSite 分别是什么?

Secure 限制 Cookie 在 HTTPS 下发送,HttpOnly 限制页面脚本直接读取,SameSite 控制跨站请求时的携带行为。三者解决的问题不同,不能互相替代。登录、跨站回调和本地开发场景应结合域名、协议与业务流程逐项验证。

缺少 CSP 或 HSTS 就代表网站不安全吗?

缺少这些头部说明浏览器侧还有可加强的控制面,但不能单凭一段响应头判断整个网站是否安全。CSP 需要与真实脚本资源兼容,HSTS 还涉及 HTTPS、子域名和证书稳定性。工具结果适合做排查起点,不替代代码审计和渗透测试。

HTTP 头部分析工具会直接请求我的网站吗?

当前工具的核心流程是由用户粘贴请求或响应头,页面在浏览器中解析并分析这些文本;它不会因为你粘贴了一段头部就自动替你完成完整站点扫描。需要分析真实网站时,请先从浏览器开发者工具或命令行获取现场,再把必要信息粘贴进去。