几个月前,我遇到了一个名为" SESSION_ID"的自定义HTTP标头的问题,未被nginx代理转移。
我已经被告知根据HTTP协议的RFC禁止使用下划线。
谷歌搜索,我发现大多数服务器如apache或nginx都将其定义为非法。RFC2616第4.2节说
遵循与RFC 822 [9]
第3.1节中给出的相同的通用格式
和RFC822说
字段名称必须由可打印的ASCII字符组成 (即值在33.到126之间的字符。 十进制,冒号除外)
下划线是ASCII表中的95个十进制字符(属于33-126范围)。 我错过了什么?
答案 0 :(得分:94)
他们不被禁止。这是CGI的遗产。 Here
如果您没有明确设置
underscores_in_headers on;
,nginx将以静默方式删除带有下划线的HTTP标头(根据HTTP标准完全有效)。这样做是为了防止在将标头映射到CGI变量时出现歧义,因为短划线和下划线都会在该过程中映射到下划线。
答案 1 :(得分:12)
标题字段中的下划线是允许的(RFC 7230, sec. 3.2.),但确实不常见。