HTTP 头格式化
网络所有处理都在浏览器本地完成,数据不上传服务器
⚠️ 它不联网:响应头要你自己取。最省事的取法是 `curl -I https://example.com`(`-I` 只发 HEAD,拿到的正好是响应头),或者在开发者工具的 Network 面板里复制整段。 把一屏密密麻麻的 HTTP 头摊成一张表 —— 请求头、响应头都认,`curl -I` 的输出直接粘进来就行。 除了对齐,这里还顺手把几件事算好:`Content-Length` 换算成可读体积(`20480` 直接看不出是 20 KB)、`Content-Type` 里的 charset 单独拎出来、状态行里的状态码抽出来方便对表。 ⚠️ 响应头还会检查三个该有却没有的安全头:`X-Content-Type-Options`(没有它,浏览器可能把用户上传的 `.txt` 当脚本执行)、`Strict-Transport-Security`(没有它,第一次访问仍可能走明文 HTTP)、`Content-Security-Policy`(没有它,一次 XSS 就能读走页面上的一切)。排查「这个站为什么被注入了」时,第一眼想看的正是 `Content-Security-Policy` 在不在。 有两处容易踩的坑,这里都按规范处理了:同名多行不合并 —— 一个响应可以有十几行 `Set-Cookie`,用逗号连起来语义就变了(它的值里本来就可能带逗号);续行会接到上一行 —— 以空格开头的行是延续,虽然 HTTP/1.1 废弃了这个写法,抓包和老网关的输出里仍能见到。
功能
- 请求头与响应头都认,`curl -I` 的输出直接可用
- 同名多行各自保留,不合并(`Set-Cookie` 常常有十几行)
- 续行接到上一行并折叠成一个空格
- `Content-Length` 换算成可读体积,`Content-Type` 的 charset 拆出来
- 状态行的状态码单独抽出,方便对照状态码表
- 检查响应里缺失的三个安全头,并说明各自漏掉的后果
- 全部在本机解析,粘进来的头不会离开这台设备
使用方法
- 把 HTTP 头原文粘贴到左侧(`curl -I https://…` 的输出即可)
- 按需关掉安全头检查
- 结果立刻出现,每一行都能单独复制
- 想细看某个 cookie 的话,把 `Set-Cookie` 那几行拿去「Cookie 格式化」
常见问题
- 为什么有两行一样的头名?是解析错了吗?
- 不是,那是正确的。HTTP 允许同一个头出现多次,而 `Set-Cookie` 是最常见的例子 —— 一个响应里十几行 `Set-Cookie` 是家常便饭,每一行描述一个独立的 cookie。 ⚠️ 这里刻意不把它们合并成一行。技术上「多个值用逗号连接」是 HTTP 允许的写法,但 `Set-Cookie` 恰恰是个例外:它的值里本来就可能有逗号(`Expires=Wed, 21 Oct 2015 07:28:00 GMT`),连起来之后谁也没法再拆开。结果是「解析看着成功了,cookie 却少了一个」。
- 「续行」是什么?
- 一种老写法:一个长头的值折成多行,后续行以空格或 tab 开头表示它是上一行的延续。 ``` X-Custom: part one part two ``` 上面这两行是一个头,值是 `part one part two`。RFC 7230 已经废弃了这个写法(因为它容易和正文混淆、也很难正确解析),但抓包工具与一些老网关的输出里仍能见到,所以这里照常处理并在旁边标出来。
- 检查出来的「缺少的安全头」必须补上吗?
- 看情况,但三个都值得认真对待。`X-Content-Type-Options: nosniff` 几乎没有代价,任何站点都该有 —— 少了它,浏览器可能把用户上传的文件当成脚本执行。`Strict-Transport-Security` 只对 HTTPS 站点有意义,注意它一旦下发就很难撤回(浏览器会记住 `max-age`),先给一个短的值试。`Content-Security-Policy` 价值最高但也最容易配错,一上来就用严格策略极可能直接白屏,建议先用 `Content-Security-Policy-Report-Only` 跑一段时间收集违规报告再切换。 另外:这三个头只对响应有意义,所以粘请求头时不会检查。
相关工具
HTTP 状态码
网络HTTP 状态码查询与速查:输入编号查含义、1xx 到 5xx 分类、常见场景与排查提示,也能用关键词反查编号。全部在浏览器本地完成。
Cookie 格式化
网络把 Cookie 请求头或 Set-Cookie 响应头解析成表格,拆出属性与过期时间,并提示缺失的 HttpOnly、Secure、SameSite。
cURL 工具箱(转代码 / 解析 / 构建)
网络粘贴 curl 命令转成七种语言的代码,或拆成方法、请求头与请求体的字段表;也能把一份 HTTP 请求反向构建成 curl 命令。
URL 解析
网络在线 URL 解析:拆出协议、主机、端口、路径、查询参数与锚点,参数逐个解码并与原始值对照,缺协议自动补 https://。全部在浏览器本地完成。
UA 解析
网络在线 User-Agent 解析:识别浏览器、版本、操作系统、设备类型与渲染引擎,并列出命中的匹配规则。结果基于模式匹配,仅供参考。全部在浏览器本地完成。
MIME 类型
网络MIME 类型与扩展名双向查询:输入 js 得到 text/javascript,输入 image/svg+xml 得到默认扩展名。附数据来源与覆盖范围,全部本地完成。