我遇到了一个问题,nginx代理没有传输自定义HTTP SESSION_ID头。 有人告诉我根据HTTP RFC,下划线是被禁止的。 搜索后,我发现像Apache或nginx这样的大多数服务器都将它们定义为在RFC2616第4.2节中非法,其中写道: 遵循RFC 822 [9]第3.1节中给出的相同通用格式 RFC822说: 字段名称必须由可打印的ASCII字符组成(即,其值在33到126之间,十进制,除冒号) 下划线是ASCII表中33-126范围内的十进制字符95。 我错过了什么?
它们并未被禁止,这是CGI遗留问题。请参见"缺失(消失)HTTP头部"。 如果您没有明确设置underscores_in_headers on;,nginx将会默默丢弃带有下划线的HTTP头部(根据HTTP标准,这些都是完全有效的)。这样做是为了防止在将头部映射到CGI变量时产生歧义,因为在该过程中,破折号和下划线都被映射为下划线。