HTTP 响应头分析器
开发工具
正在载入
正在加载工具
工具代码会在打开时按需载入,请稍候。
本工具的全部运算都发生在你的浏览器中,输入内容不会发送到任何服务器。
关于这个工具
粘贴开发者工具或命令行记录中的响应头,即可在浏览器内查看。可选的状态行用于标识响应;重复字段会分别保留,Set-Cookie 日期中的逗号也不会被拆开。选择一个响应块,查看缓存、内容类型、Location、CORS 以及依赖上下文的安全提示。分析器不会发起请求、保存输入历史或发送头部遥测数据,所有值均以纯文本显示,不执行 HTML。复制或导出的内容仍可能含有秘密信息:本工具不提供脱敏。
常见用途
- 比较已记录的 API 或静态资源响应中的缓存指令,再检查浏览器或 CDN 配置。
- 检查重复响应头,并从粘贴的重定向或临时响应序列中选择单个响应。
- 查看声明的 MIME 类型、字符集、重定向位置和 CORS 头,同时明确哪些请求上下文仍未知。
使用方法
- 1.仅粘贴响应头,可在开头加入 HTTP/1.1 200 OK 等状态行。多个响应之间留空行,每个后续响应块都必须以状态行开头。输入最多为 256 KiB UTF-8 文本、4,000 行和 32 个响应块。
- 2.分析输入,按提示的行号和列号修正错误,再选择要检查的响应块。只有确定原始连接方式时才选择 HTTPS 或 HTTP;否则保持「未知」。
- 3.结合原始请求阅读保留的字段和分类提示。检查其中的 Cookie、令牌、可识别身份的 URL 及其他敏感信息后,再复制或下载所选响应块的 JSON 报告。
虚构响应头示例
两个 Cookie,过期日期中含逗号
HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 X-Content-Type-Options: nosniff Set-Cookie: session=demo-session; Expires=Wed, 21 Oct 2026 07:28:00 GMT; Secure; HttpOnly Set-Cookie: theme=dark; Path=/; SameSite=Lax
一个响应块 · 两个独立的 Set-Cookie 字段 声明的 MIME 类型:text/html · 字符集:utf-8 X-Content-Type-Options:nosniff
日期中的逗号保留在第一个 Cookie 值内。nosniff 要求浏览器遵循声明的 MIME 类型;分析器不会加载正文或验证其是否为 HTML。两个虚构 Cookie 值均可见,输出时也不会脱敏。
分别选择重定向响应与后续响应
HTTP/1.1 301 Moved Permanently Location: /docs Cache-Control: max-age=300 HTTP/2 200 Content-Type: application/json Cache-Control: no-cache ETag: "demo-v2"
两个响应块:先 301,再 200 第一块:Location /docs · max-age=300 第二块:application/json · no-cache · ETag "demo-v2"
分别选择响应块进行检查。相对 Location 需要原始请求 URL 才能解析,本工具不会打开它。第二个响应在缓存复用前需要验证;no-cache 本身并不禁止存储。工具不会推断这两个响应一定属于已验证的重定向链。
检查相互冲突的存储指令
HTTP/1.1 200 OK Content-Type: text/plain; charset=utf-8 Cache-Control: public, private, max-age=600, no-store
public 与 private 同时出现,需要检查 即使存在 max-age=600,no-store 仍禁止存储
这些有意冲突的指令用于演示配置检查。新鲜期不能覆盖 no-store。应检查生成此响应的服务器和中间层配置,而不是认为缓存一定会保留响应十分钟。
没有状态行的 CORS 响应头
Content-Type: application/json Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true
一个响应块 · 状态未知 通配来源与允许凭据的组合需要检查 实际 CORS 结果:未知
第一个响应块可以省略状态行。这组头部不能授权携带凭据的 CORS 响应,但粘贴内容无法说明请求是否使用了凭据,或是否需要跨域访问。
常见响应头分析误区
- 粘贴完整正文、curl 命令或请求行:请只复制响应头片段,可附带支持的状态行表示。
- 字段名缺少冒号或包含空白:使用 Name: value 格式,并按提示的行号、列号修正;旧式多行折叠头部会被拒绝。
- 仅用空行分隔没有状态行的头部组:只有第一个响应块可以省略状态,后续每个块都必须以新的状态行开头。
- 将 HTTP/2 视为 HTTPS 的证明、将缺少安全头视为漏洞证明,或将 CORS 提示视为请求已失败:请先核实缺失的上下文。
- 混淆 no-cache 与 no-store,或将 max-age 理解为浏览器、CDN 必然保留响应的时间:请检查全部适用指令及请求信息。
- 认为导出已脱敏而直接分享:请自行检查原始 Cookie、令牌、Location 查询参数及自定义头部值。
限制与说明
- 输入上限为 256 KiB(262,144 个 UTF-8 字节)、4,000 行和 32 个响应块。输入被拒绝时不会生成部分分析;建议使用较小且完整的响应头片段。
- 这是文本解析器,不是网络客户端或线路协议校验器。支持文本记录中的 HTTP/1.0、HTTP/1.1、HTTP/2 和 HTTP/3 状态行表示;不支持请求行、响应正文、HTTP/2 伪头字段或旧式折行续行。
- 仅凭响应头无法确定缓存是否实际复用、CORS 是否成功、相对 Location 在未知请求 URL 下指向何处,或声明的 MIME 类型和字符集是否符合正文。分析器不会访问 Location 或测试接口。
- 安全提示是带条件的检查建议,不是评分或漏洞证明。HSTS 提示依赖原始传输方式;不能从 HTTP/2 或 HTTP/3 字样推断 HTTPS。某个响应头存在,也不能证明策略、TLS 配置或应用本身正确。
- 复制与下载仅包含所选响应块及其分析提示,不包含其他响应块。原始值仍会保留:导出不会移除凭据、Set-Cookie 值、内部主机名或身份标识。本地处理与纯文本显示不代表内容适合分享;下载的文件会保存在你的设备上。
常见问题
no-cache 是否表示响应不能被存储?
不是。不带参数的 no-cache 要求复用已存储的响应前成功验证;no-store 通常禁止存储,但理解并实现 must-understand 的缓存存在规范规定的例外。max-age 以秒指定新鲜期,s-maxage 会在共享缓存中覆盖它。不带参数的 private 禁止共享缓存存储,public 则在适用规则下允许共享缓存。其他指令与请求上下文仍然重要,冲突值需要检查。
这些响应头能证明跨域请求一定成功吗?
不能。还需要知道请求的 Origin、凭据模式、方法、请求头及可能的预检过程。即使带有 Access-Control-Allow-Credentials: true,Access-Control-Allow-Origin: * 也不能授权携带凭据的 CORS 响应。若资源本来就不供跨域脚本访问,缺少 CORS 响应头并不一定是问题。
为什么要手动选择 HTTP 或 HTTPS 上下文?
粘贴的状态行不能说明原始 URL 的协议。浏览器会忽略通过 HTTP 收到的 Strict-Transport-Security;HSTS 通过 HTTPS 建立。单次记录中缺少该头部,也无法反映浏览器此前存储的 HSTS 策略。请只选择有依据的上下文,并将结果作为进一步检查的线索。
为什么保留重复头部,而不自动合并?
不同字段的合并规则不同。Set-Cookie 必须分别保留,Expires 日期中的逗号也不能用于拆分 Cookie。分析器按原顺序保留字段和值供检查,这也会保留其中的秘密信息。复制或导出不会自动脱敏。
- RFC 9110 · HTTP 字段语法与重复字段
- RFC 9111 · 响应缓存指令
- MDN · Cache-Control 行为
- MDN · Content-Type 与字符集
- MDN · X-Content-Type-Options 与 nosniff
- MDN · Location 与相对 URL
- MDN · Access-Control-Allow-Origin
- MDN · Strict-Transport-Security 与 HTTPS