HTTP 中的 Header 虽然接触很多,但是一些规则容易忽略:
- HTTP Header 名称不区分大小写。因此
Content-Type
与content-type
并无差别 - HTTP Header 名称与值由
:
分割,值首部空格将被忽略,更严格地说,是被/:\s+/
分割。因此A: 3
与A: 3
并无差别。 - HTTP Header 中的非标准自定义首部由
X-
作为前缀,虽已被废弃,但仍然有大量使用。比如X-Powered-By
,仍被大量服务器框架所使用。
HTTP Header 虽然不区分大小写,但有时也希望获取到原始的 Header,因此在 Node.js 中提供了两个 API:
- message.headers:对头部全部转化为小写形式返回
- message.rawHeaders:对头部不做大小写转化进行返回
测试
httpbin.org/headers
可返回请求头,可与 curl
结合使用。
# 请求头无关大小写,在 httpbin 中会全部作大写处理
$ curl "http://httpbin.org/headers" -H "A: 3" -H "b: 4" -H "c: 5"
{
"headers": {
"A": "3",
"Accept": "*/*",
"B": "4",
"C": "5",
"Host": "httpbin.org",
"User-Agent": "curl/7.79.1",
"X-Amzn-Trace-Id": "Root=1-63214e3e-5b4c2b280bc00e7e39b568fc"
}
}
实例
我在 Apifox 中演示了知名网站的一些响应头。
作业
- HTTP 响应头中
Cache-Control
,有时为首字母大写,有时为小写,哪个是正确写法 - 观察自己常逛网站的 HTTP 请求头与响应头
- 通过
curl
与httpbin
测试请求头部