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

几个月前,我遇到了一个名为“ SESSION_ID”的自定义HTTP标头的问题,该标头未被nginx代理传输。


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


谷歌搜索,我发现大多数服务器(如apache或nginx)将它们定义为非法。


RFC2616第4.2节说


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


和RFC822说


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


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


一只甜甜圈
浏览 796回答 2
2回答

回首忆惘然

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

天涯尽头无女友

标头字段中可以使用下划线(RFC 7230,第3.2节),但实际上并不常见。
打开App,查看更多内容
随时随地看视频慕课网APP