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 分安全评分。它只报告服务器发送的内容:不跟随重定向,也不读取页面正文。

嵌入此工具

× px

                        

💡 集成提示

复制嵌入代码并粘贴到您网站的HTML中。响应式版本会自动适应所有屏幕尺寸。

0 个评分
✓

热门工具

没有更多工具
探索所有工具

如果状态码是 3xx,说明页面发生了重定向:用重定向检查器跟踪每一跳重定向,找出该网址最终落在哪里。

关于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 等管理端口都会被拒绝。

使用场景

正在推行 Content-Security-Policy 的开发者在每次发布后检查预发布域名,确认真正出现的是 content-security-policy,而不是评分刻意忽略的 content-security-policy-report-only。
审核域名迁移的 SEO 人员粘贴一个旧网址,读取返回的 301 和 location 值,再把这个目标地址粘回输入框,一跳一跳地走完整条链路,因为本工具从不替你跟随重定向。
刚启用 HSTS 的系统管理员在把域名提交到预加载列表之前,确认 strict-transport-security 带有足够长的 max-age 以及 includeSubDomains 和 preload;github.com 返回的是 max-age=31536000; includeSubdomains; preload。
排查内容过期的支持工程师在「所有响应头」表格中查看 cache-control、etag、age 和 cf-cache-status,以区分边缘缓存和浏览器缓存:example.com 返回 cf-cache-status: HIT,age 为几千秒。
学习 HTTP 的学生依次点击 google.com、github.com、cloudflare.com 和 stackoverflow.com 这几个示例,无需安装 curl 或打开浏览器开发者工具,就能并排比较真实的响应头集合和从 F 到 A+ 的等级。

如何检查网站的 HTTP 响应头

1

在搜索框中输入域名或完整地址,例如 example.com;https:// 前缀会自动补上。你也可以点击「尝试」旁边的示例:google.com、github.com、cloudflare.com 或 stackoverflow.com。

2

按回车或点击「检查」。请求以 HEAD 方法从我们的服务器发出,因此只会返回响应头,永远不会返回页面正文。

3

阅读三张摘要卡片:带原因短语的状态码、100 分制并附字母等级的安全评分,以及以毫秒计的响应时间。

4

逐条查看「安全头」,看 HSTS、CSP、X-Content-Type-Options、X-Frame-Options、X-XSS-Protection、Referrer-Policy 和 Permissions-Policy 中哪些被标为 Present 或 Missing,并阅读每个存在的响应头下方显示的取值。

5

展开「所有响应头」,阅读服务器返回的每一个响应头名称和取值,包括评分不涵盖的缓存、Cookie 和 CDN 字段。

6

点击「复制」,把整份报告——网址、状态、带等级的评分和响应头列表——以纯文本放入剪贴板。

专业提示

  • 只输入域名即可:输入框会替你补上 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 都是按原样逐字比较的。

不能。本页报告的是响应头,因为请求是由我们的服务器发出的,而不是你的浏览器。要查看浏览器发出的请求头,请打开开发者工具,切到「网络」面板并展开请求标头,或者使用一个会回显请求的服务。这里显示的一切——状态、评分和表格——描述的是你输入的网站,而不是你的客户端。

FreeWebTools AI
Powered by free AI models · Full chat →