HTTP头部检查器
HTTP 头部检查器会向一个网址发起请求,并显示服务器返回的响应头:状态码、缓存与 Cookie 字段,以及浏览器实际执行的安全响应头。本工具还会根据其中七个响应头给出 0 到 100 分的评分:HSTS、CSP、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 和 Permissions-Policy。检查 github.com 时约 60 毫秒返回 200 OK、17 个响应头,评分 90/100,等级 A+。
这个 HTTP 头部检查器会显示什么?
输入一个域名,本工具会从我们的服务器向该地址发送一个 HEAD 请求,然后显示状态码、以毫秒计的往返耗时、完整的响应头列表,以及依据 HSTS、Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 和 Permissions-Policy 计算的 0 到 100 分安全评分。它只报告服务器发送的内容:不跟随重定向,也不读取页面正文。
热门工具
关于HTTP头部检查器
这个 HTTP 头部检查器接收一个网址,从我们的服务器向它发送一个 HEAD 请求,并显示返回的全部内容:带原因短语的状态码、以毫秒计的往返耗时,以及服务器发送的每一个响应头。检查 github.com 时,结果是约 60 毫秒返回 200 OK 和 17 个响应头字段,从 content-type、etag 一直到完整的 content-security-policy 值。
安全评分卡片按 100 分制评价七个响应头。Strict-Transport-Security 和 Content-Security-Policy 各占 20 分,X-Content-Type-Options 和 X-Frame-Options 各占 15 分,X-XSS-Protection、Referrer-Policy 和 Permissions-Policy 各占 10 分。90 分及以上为 A+,80 分为 A,70 分为 B,60 分为 C,40 分为 D,低于 40 分为 F。github.com 因为缺少 Permissions-Policy 而得 90/100;example.com 七个一个都没有发送,得 0 分。
评分只看是否存在,不看质量。x-xss-protection: 0 这个值其实关闭了该过滤器,却照样拿满十分;而 content-security-policy-report-only 一分都拿不到。因此请阅读每个标记为 Present 的条目下方显示的具体取值,而不要只看等级。重定向也不会被跟随:google.com 返回 301 以及 location: https://www.google.com/,要评估目标页面,需要把这个地址再粘贴进来检查一次。请求只使用 HEAD 方法,因此不会分析任何 HTML、meta 标签或页面文字;请求十秒后放弃,同一个地址每分钟最多接受二十次检查。
你输入的网址会发送到本站服务器,由它代你发起请求,使用的 User-Agent 是 FreeWebTools Header Checker/1.0,并且不带你的任何 Cookie 或会话,所以你看到的是匿名访客收到的响应。私有和保留 IP 段、localhost、云元数据端点以及 22、3306、6379 等管理端口都会被拒绝。
使用场景
如何检查网站的 HTTP 响应头
在搜索框中输入域名或完整地址,例如 example.com;https:// 前缀会自动补上。你也可以点击「尝试」旁边的示例:google.com、github.com、cloudflare.com 或 stackoverflow.com。
按回车或点击「检查」。请求以 HEAD 方法从我们的服务器发出,因此只会返回响应头,永远不会返回页面正文。
阅读三张摘要卡片:带原因短语的状态码、100 分制并附字母等级的安全评分,以及以毫秒计的响应时间。
逐条查看「安全头」,看 HSTS、CSP、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 和 Permissions-Policy 中哪些被标为 Present 或 Missing,并阅读每个存在的响应头下方显示的取值。
展开「所有响应头」,阅读服务器返回的每一个响应头名称和取值,包括评分不涵盖的缓存、Cookie 和 CDN 字段。
点击「复制」,把整份报告——网址、状态、带等级的评分和响应头列表——以纯文本放入剪贴板。
专业提示
- 只输入域名即可:输入框会替你补上 https://,所以 github.com 会按 https://github.com 检查。想看纯 HTTP 的响应,就明确写出 http://,那里通常没有 strict-transport-security,因为 RFC 6797 要求浏览器在不安全连接上忽略这个响应头。
- 评分奖励的是存在与否,而不是取值。github.com 发送的 x-xss-protection: 0 其实关闭了过滤器,却照样拿满十分,所以在相信等级之前,先读一读每个 Present 条目下方那行灰色的取值。
- 仅报告模式的策略不计分。google.com 只发送 content-security-policy-report-only,没有实际生效的策略,因此 CSP 的 20 分全部落空;Present 标记只对完全一致的响应头名 content-security-policy 出现。
- 当状态码卡片显示 301 或 302 时,从响应头表格中复制 location 的值,再对它做第二次检查。重定向响应本身几乎不带安全响应头,这正是 google.com 只有 25/100 的原因。
- 复制按钮会把整份报告以纯文本放进剪贴板——网址、状态、带等级的评分和每一个响应头,正好可以粘进工单。批量检查请按每分钟二十次的节奏进行;超过之后接口会返回 429,页面则显示一条笼统的失败提示。
故障排除
网站在浏览器里能正常打开,页面却显示「Failed to check headers. Please verify the URL is accessible.」。
这条笼统的提示出现在返回结果无法使用的时候。最常见的原因是频率限制:同一个地址每分钟超过二十次检查,接口就会返回 429 Too Many Requests。等一分钟再试即可。当服务器响应 HEAD 请求的时间超过十秒的超时上限时,也会看到同样的提示。
错误行显示「Connection failed: SSL certificate problem: certificate has expired」。
证书会被验证而不是被无条件信任,所以过期、自签名或签发给其他主机名的证书会直接中止检查,而不是给出一份具有误导性的报告。请续期或修正证书,或者改用 http:// 地址来读取服务器在建立 TLS 之前发送的响应头。
错误行显示「Internal URLs not allowed」「Private IPs not allowed」或「This port is not allowed」。
为了避免被当成内网扫描器,本工具拒绝 localhost、私有和保留 IP 段、云元数据端点,以及 22、23、25、3306、5432、6379、11211、27017、8080 和 8443 端口。请改用可公开解析的主机名并使用 80 或 443 端口;本地服务器请直接在该机器上运行 curl -I。
状态码卡片显示 301 或 302,只有寥寥几个响应头,安全评分也很低。
重定向是刻意不跟随的,所以你评估的是重定向响应本身,而不是目标页面。google.com 返回 301 和 location: https://www.google.com/,正因如此只有 25/100。请从响应头表格中复制 location 的值,再对它做第二次检查,才能评估访客真正落地的页面。
错误行显示「Connection failed: Could not resolve host」。
我们的服务器找不到该主机名的公开 DNS 记录。请检查拼写,删除粘贴地址时带进来的空格或引号,并确认该域名在你的网络之外也能解析。只存在于你的 hosts 文件、VPN 之后或内部 DNS 上的主机,从这里无法访问。
常见问题解答
在本页顶部的输入框里输入域名,然后按回车或点击「检查」。我们的服务器会向该网址发送一个 HEAD 请求,页面随即填满三张卡片:状态码、安全评分和响应时间,接着是「安全头」分析和一张列出所有返回响应头的表格。github.com 约 60 毫秒返回 200 OK 和 17 个字段。不需要浏览器扩展、curl 命令或开发者工具。
HTTP 头部是附在请求或响应上、用来描述它的一行「名称: 值」。content-type: text/html; charset=utf-8 说明媒体类型,cache-control 说明响应可以复用多久,location 指出重定向的目标。RFC 9110《HTTP Semantics》定义了字段语法和字段名注册表。头部与正文并列传输,而不在正文之内;本页只列出响应头。
本页评分的七个是 Strict-Transport-Security、Content-Security-Policy、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 和 Permissions-Policy。HSTS 和 CSP 各占 20 分,X-Content-Type-Options 和 X-Frame-Options 各占 15 分,其余三个各占 10 分。MDN 将 X-XSS-Protection 标为已弃用且非标准,并建议改用严格的 Content-Security-Policy,所以那十分应视为历史遗留信号而非目标。
运行检查后阅读「安全头」部分:七个响应头各带一个 Present 或 Missing 标记、一行说明,若存在还会显示服务器返回的确切取值。安全评分卡片把结果换算成 0 到 100 分并给出等级:90 分及以上为 A+,80 分为 A,70 分为 B,60 分为 C,40 分为 D,低于 40 分为 F。github.com 得 90/100,只缺 Permissions-Policy。
按 F12 打开开发者工具,切到「网络」面板,刷新页面,点击文档请求,再阅读响应标头一栏。那里显示的是你自己的浏览器收到的内容,包含 Cookie 和内容协商结果。本页则是中立的对照:请求从我们的服务器发出,User-Agent 为 FreeWebTools Header Checker/1.0,不带任何 Cookie,所以你看到的是匿名访客收到的响应。
头部承载了一条消息中除正文以外的一切:传输的结果、媒体类型与编码、缓存和重新验证规则、Cookie,以及浏览器必须执行的安全策略。没有 content-type,浏览器只能猜测格式;没有 strict-transport-security,它可能继续使用明文 HTTP;没有 content-security-policy,被注入的脚本会畅通无阻地执行。仅靠正文无法表达这些内容。
每个字段占一行:名称、冒号、可选空格和取值,例如 x-frame-options: deny。RFC 9110 第 5.1 节规定字段名不区分大小写,而 HTTP/2 要求使用小写,这正是上面表格显示 content-type 而不是 Content-Type 的原因。同一个字段可以合法地重复出现;遇到这种情况,本工具保留最后解析到的取值。
会。TLS 会加密整条 HTTP 消息,头部也在其中,因此网络上的旁观者只能看到目标 IP 地址和 TLS SNI 中的主机名,看不到字段名、取值或 Cookie。明文 HTTP 则毫无保护,这正是 Strict-Transport-Security 要解决的问题:RFC 6797 要求浏览器在整个 max-age 期间对该主机使用 HTTPS,而且如果该响应头是通过 HTTP 送达的,浏览器会直接忽略它。
字段名不区分。RFC 9110 第 5.1 节明确字段名不区分大小写:Content-Type 和 content-type 是同一个字段,HTTP/2 还强制使用小写形式。取值则是另一回事:浏览器对 x-frame-options: DENY 和 deny 一视同仁,但 location 中的网址、ETag 或 Content-Security-Policy 里的 nonce 都是按原样逐字比较的。
不能。本页报告的是响应头,因为请求是由我们的服务器发出的,而不是你的浏览器。要查看浏览器发出的请求头,请打开开发者工具,切到「网络」面板并展开请求标头,或者使用一个会回显请求的服务。这里显示的一切——状态、评分和表格——描述的是你输入的网站,而不是你的客户端。