2014-04-04 48 views
30

几个月前,我遇到了一个名为“SESSION_ID”的自定义HTTP头的问题,未被nginx代理转发。为什么在HTTP头名中禁止使用下划线

我被告知下划线是根据HTTP协议的RFC禁止的。

使用谷歌搜索,我发现大多数服务器如apachenginx将它们定义为非法。

RFC2616 4.2节说

遵循相同的通用格式定义在RFC的3.1节给出822 [9]

RFC822

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

下划线是ASCII表中95个十进制字符(属于33-126范围)。 我错过了什么?

回答

57

他们不被禁止。这是CGI的遗产。 Here

如果没有明确设置underscores_in_headers on;,nginx的将自动删除HTTP标头用下划线(这是完全合法的根据HTTP标准)。这是为了防止将标题映射到CGI变量时出现歧义,因为在该过程中,破折号和下划线都被映射为下划线。

+0

刚刚花了几个小时调试为什么我的rails应用程序在开发中工作正常,但不是因为这样的生产:/ – Qwertie

相关问题