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

时间:2014-04-04 07:19:38

标签: apache http nginx rfc

几个月前,我遇到了一个名为" SESSION_ID"的自定义HTTP标头的问题,未被nginx代理转移。

我已经被告知根据HTTP协议的RFC禁止使用下划线。

谷歌搜索,我发现大多数服务器如apachenginx都将其定义为非法。

RFC2616第4.2节说

  

遵循与RFC 822 [9]

第3.1节中给出的相同的通用格式

RFC822

  

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

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

2 个答案:

答案 0 :(得分:94)

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

  

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

答案 1 :(得分:12)

标题字段中的下划线是允许的(RFC 7230, sec. 3.2.),但确实不常见。