HTTP 响应头在线检查

看一个网址到底返回了什么头、中间跳了几次、每次跳到哪里。顺便把安全响应头的配置体检一遍,缺哪项会直接影响怎么修。

需服务端处理这个工具由服务器代为访问网络

你要检查的网址会发送到本站服务器,由服务器发起查询,结果只返回给这个页面。

服务器不保存查询内容,也不记录你查了什么,只按来源 IP 限制频率(每分钟 30 次)防止被当跳板刷。站上其它工具仍然全部在浏览器本机完成。

只读响应头,不下载响应体;最多跟随 8 跳重定向,每一跳都会重新校验目标地址。

看响应头比看页面更有用的时候

页面能打开,不代表配置对了。响应头里有几类信息是页面上完全看不到的:缓存策略决定了用户拿到的内容能新鲜多久、跳转链路决定了每次访问多绕了几趟、安全头决定了浏览器在遇到攻击时有没有第二道防线。排查「为什么改了代码用户还是看到旧页面」「为什么某个链接在微信里打不开」这类问题,看响应头往往比看页面代码快得多。

缓存是最常被误配的一项。Cache-Control 写 max-age=31536000 意味着一年内浏览器不会再问服务器一次,这对带指纹的静态资源(app.3f2a1c.js 这种文件名)是正确做法;但如果把它用在 HTML 或者接口响应上,用户就会长期看到旧内容,而且刷新也不一定有效。反过来,全部写 no-store 又会让每次访问都完整回源,白白浪费带宽。区分标准是「这个 URL 的内容会不会变」——会变就别长缓存,靠文件名带指纹来区分版本。

跳转链里藏着性能问题。很多站点同时存在 http 跳 https、apex 域名跳 www、旧路径跳新路径三组规则,一次访问要经过三次 302,移动网络下就是多出近一秒。合并这些规则是收益很高的优化,做法是让 http 和 apex 域名在同一个响应里直接跳到最终地址,不要串联。另外 301 和 302 的区别会被很多人忽略:301 是永久跳转、会被浏览器和搜索引擎长期记住,302 是临时跳转,用错会造成缓存污染,而且很难撤销。

server 和 x-powered-by 这类头不直接影响功能,但会影响被攻击的概率。声明里带上具体版本号,等于告诉扫描器「我这里有这些已知漏洞」。关掉版本号不解决漏洞本身,但会让自动化的批量扫描略过你,转向更容易得手的目标。这属于成本极低、几乎没有副作用的加固,nginx 上是 server_tokens off,Apache 上是 ServerTokens Prod。

最后说清体检那一栏的定位:它给的是「有没有配」和「配置有没有明显问题」,不是安全审计结论。比如存在 CSP 且没有 unsafe-inline 只说明策略存在,策略本身是不是真的挡得住攻击要看具体内容。这些结论适合用来找漏配的地方,真要评估防护效果还是要结合实际的攻击面来看,必要时再用HTTP 状态码速查确认某个状态码的含义,用SSL 证书在线检查把传输层的问题单独排查一遍。

常见问题

为什么不能直接在浏览器里看响应头?

浏览器出于同源策略限制,跨域请求只暴露 CORS 明确允许的少数几个响应头,中间的 3xx 跳转也看不到。开发时在控制台能看全,是因为那是同源请求。这个工具由服务器发请求,所以任意网址的完整响应头和跳转链路都能拿到。

相关:HTTP 状态码速查

Security 那一栏提示缺 HSTS,必须加吗?

不是必须,但值得加。没有 HSTS 时,用户第一次输入 http:// 或者点了别人给的 http 链接,那一次请求是明文发出的,可能被中间人劫持(SSL 剥离)后再伪造一个 http 页面。加了 HSTS 之后,浏览器会记住「这个站只能用 https」,此后不再发明文请求。前提是全站 HTTPS 已经跑通,否则加早了会把用户挡在门外。

为什么状态码显示 200,但内容不是我想要的?

很多站会把「找不到页面」渲染成一个漂亮的 200 页面,而不是返回 404。这也是判断软 404 的办法:看最终状态码是 200 但 URL 被改写到了某个提示页。SEO 上这是个真问题,搜索引擎会把大量无内容页面当成正常页面收录,稀释权重。

重定向链太长有什么影响?

每一跳都是一次完整的往返,移动网络下每跳可能多几百毫秒;而且搜索引擎对跳转链会损耗权重。最常见的连锁是 http 跳到 https、再跳到带 www 的域名、又跳到正确的路径,三次往返完全可以合成一次。另外 https 跳到 http 是降级,中间的内容可被篡改,出现这种情况应该立刻修。

响应头里显示 Set-Cookie,会不会泄露我的登录状态?

不会。这里的请求由服务器发出,不携带你的任何 cookie,所以拿到的 Set-Cookie 是「服务器准备种给访客的」那一个,而不是你的会话。不过对站方来说这确实是一种信息暴露:登录接口的 Set-Cookie 理论上可以被任何来源读取到,所以不要在未登录时就下发敏感 cookie。

允许忽略证书错误是什么情况下用?

对方证书有问题(过期、自签、域名不符)时,Node 默认会拒绝连接,于是看不到任何响应头。勾上之后会忽略校验把响应头取回来,同时把证书问题单独标出来。自建的内网服务、测试环境经常是这个状态,想先看配置就得这样绕一下。

相关:SSL 证书在线检查