为什么HTTP服务器禁止在HTTP标头名称中使用下划线


71

我有一个自定义HTTPSESSION_ID标头未由nginx代理传输的问题。

有人告诉我,根据HTTP RFC,下划线是禁止的。

搜索时,我发现大多数服务器(例如Apachenginx)RFC2616第4.2节中将它们定义为非法,该消息说:

遵循与RFC 822 [9]第3.1节中给出的相同通用格式。

RFC822说:

字段名称必须由可打印的ASCII字符组成(即,值介于33和126之间的字符,十进制,冒号除外)

下划线是ASCII表中的十进制字符95,范围为33-126。

我想念什么?

Answers:


136

他们不是禁止的,这是CGI的遗产。请参阅“缺少(消失)的HTTP标头”。

如果未显式设置underscores_in_headers on;,nginx会静默删除带下划线的HTTP标头(根据HTTP标准,此标头完全有效)。这样做是为了避免将标头映射到CGI变量时出现歧义,因为在此过程中,短划线和下划线都映射到了下划线。


13
仅仅花了几个小时的调试时间,为什么我的Rails应用程序就可以在开发中正常运行,但在生产上却无法正常运行,因为:/
Qwertie

1
仅仅花了几个小时来调试为什么我的NodeJS应用程序可以在开发中正常运行,但在生产上却不能正常运行,因此:/
jujule

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.