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

whi*_*ite 60 apache http nginx rfc

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

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

谷歌搜索,我发现像apachenginx这样的大多数服务器都将它们定义为非法.

RFC2616第4.2节说

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

RFC822

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

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

Ale*_*Ten 107

他们不是被禁止的.这是CGI的遗产.这里

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

  • 只是花了几个小时调试为什么我的 Flask 应用程序在开发中运行良好,但在生产中却运行不佳,因为:/ (9认同)
  • 只花了 5 分钟调试为什么我的 Flask 应用程序在开发或生产中无法工作,然后幸运的是偶然发现了这个线程。唷,躲过了一颗子弹。 (8认同)
  • 花了几个小时调试为什么我的rails应用程序在开发中工作正常而不是生产因为这个:/ (7认同)
  • 只是花了几个小时调试为什么我的 NodeJS 应用程序在开发中运行良好,但在生产中却运行不佳,因为:/ (6认同)

Jul*_*hke 15

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