HTTP 自定义报文头

自定专用消息头可通过X-前缀来添加;

但是这种用法被IETF在2012年6月发布的 RFC5548 中明确弃用,原因是其会在非标准字段成为标准时造成不便;其他的消息头在 IANA 注册表中列出, 其原始内容在 RFC 4229 中定义。 此外,IANA 还维护着被提议的新HTTP 消息头注册表.

虽然已经被明确弃用,但是在平时还是能够看到大量的页面依旧在 Response Header 中会 附带 以 x- 开头的内容。
HTTP 自定义报文头
所以了解一些自定义报文头的东西还是很有必要的,下面是来自 keycdn 上的一篇文章,原文传送门


自定义HTTP headers 通常意味着提供一些对 web 开发者有用的附加信息,或者是方便故障排除(troubleshooting)。这些 headers 通常以 X- 开头,我们会在之后进一步讨论其命名规范。这篇文章可以帮助你更好的理解 自定义 HTTP header 的实质,以及为什么他们能够发挥作用和怎样去创建他们。

为什么要使用 自定义 HTTP Headers?

如上所述,自定义报文头对故障排除和传递附加信息特别有用,甚至能在服务端实现特定的逻辑。例如, KeyCDN 使用 X-Cache 来告诉用户请求的某个资源是来自 edge server(代理服务器?)还是来自源服务器。
HTTP 自定义报文头
如果资源是来自缓存自定义报文头会返回一个 HIT ,如果来自源服务器则会返回MISS。另外一个使用自定义 HTTP header 的例子是 X-Pull 。你可以使用这个自定义头做很多事,比如,限制源服务器上的带宽、限制 CDN 流量、在源服务器上创建自定义逻辑,等等。
自定义 headers有很多能够经常被用到的作用。即使你没有使用 CDN 亦或者没有在你的源服务器人为指定任何自定义 HTTP headers ,你可能仍然会发送带有自定义header 的响应。比如说,WorldPress 会发送以下 headers(虽然你可以手动禁止)。

X-Powered-By: PHP/5.2.17
X-Pingback: https://example.com/xmlrpc.php

命名规范

提到 HTTP 的自定义headers,这里面有一些来来往往的故事。最初,推荐自定义headers 以 X- 开头,这样用户就可以知道某个 header 是自定义的而不是标准的。然而,根据 RFC 5548 ,这种做法被弃用了。
虽然被弃用了,但是并不意味着不再支持。实际上,仍然还有很多场景用到 X- 。弃用的原因是以后某个特定的自定义 HTTP header 成为标准之后,浏览器需要支持两种命名,要不然开发者就需要更新之前命名的所有自定义header。现在推荐使用不含 X- 标记的名字来命名自定义 headers 。

设置自定义 HTTP Headers

如果你想在你的服务器 HTTP response 报文头中包含自定义的 HTTP header,流程将会很简单。我们将在接下来告诉你在 ApacheNginx 上配置自定义header所需要配置。

Apache

对于 Apache 用户来说,把下面的片段添加进 .htaccess 文件。将 Custom-Header-NameCustom Header Value 替换为想要的自定义header 名字和值就可以了。

Header set Custom-Header-Name "Custom Header Value"

Nginx

对于 Nginx 用户来说,将下面这个片段添加进 configuration 文件。

add_header Custom-Header-Name "Custom Header Value"

总结

自定义 HTTP headers 在某些场景下非常有用。虽然他设计的主要目的是为了提供附加信息,但是你可以使用它做更多的事。有一点值得注意的是避免将它用在改变 HTTP 原生方法的场景中。除此之外,可以尽情尝试不同的用法。