自定专用消息头可通过X-
前缀来添加;
但是这种用法被IETF在2012年6月发布的 RFC5548 中明确弃用,原因是其会在非标准字段成为标准时造成不便;其他的消息头在 IANA 注册表中列出, 其原始内容在 RFC 4229 中定义。 此外,IANA 还维护着被提议的新HTTP 消息头注册表.
虽然已经被明确弃用,但是在平时还是能够看到大量的页面依旧在 Response Header 中会 附带 以 x-
开头的内容。
自定义HTTP headers 通常意味着提供一些对 web 开发者有用的附加信息,或者是方便故障排除(troubleshooting)。这些 headers 通常以 X-
开头,我们会在之后进一步讨论其命名规范。这篇文章可以帮助你更好的理解 自定义 HTTP header 的实质,以及为什么他们能够发挥作用和怎样去创建他们。
为什么要使用 自定义 HTTP Headers?
如上所述,自定义报文头对故障排除和传递附加信息特别有用,甚至能在服务端实现特定的逻辑。例如, KeyCDN 使用 X-Cache
来告诉用户请求的某个资源是来自 edge server(代理服务器?)还是来自源服务器。
如果资源是来自缓存自定义报文头会返回一个 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,流程将会很简单。我们将在接下来告诉你在 Apache
和 Nginx
上配置自定义header所需要配置。
Apache
对于 Apache 用户来说,把下面的片段添加进 .htaccess
文件。将 Custom-Header-Name
和 Custom 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 原生方法的场景中。除此之外,可以尽情尝试不同的用法。