Подтвердить что ты не робот

Почему символы подчеркивания запрещены в заголовках HTTP-заголовков

Несколько месяцев назад у меня возникла проблема с пользовательским заголовком HTTP с именем "SESSION_ID", который не был передан прокси-сервером nginx.

Мне сказали, что подчеркивания запрещены в соответствии с RFC протокола HTTP.

Googling, я обнаружил, что большинство серверов, таких как apache или nginx, определяют их как незаконный.

RFC2616 в разделе 4.2 говорится

следуют тем же общим форматам, что и в разделе 3.1 RFC 822 [9]

и RFC822 говорится

Имя поля должно состоять из печатных символов ASCII         (то есть символов, которые имеют значения между 33 и 126.,         десятичный, кроме двоеточия)

знак подчеркивания - 95 десятичный символ в таблице ASCII (относится к диапазону 33-126). Что мне не хватает?

4b9b3361

Ответ 1

Они не запрещены. Это наследие CGI. Здесь

Если вы явно не устанавливаете underscores_in_headers on;, nginx будет молча отбрасывать заголовки HTTP с символами подчеркивания (которые отлично подходят в соответствии со стандартом HTTP). Это делается для того, чтобы предотвратить неоднозначность при сопоставлении заголовков с переменными CGI, так как обе черточки и символы подчеркивания отображаются для подчеркивания в течение этого процесса.

Ответ 2

Подчеркивания полей заголовка разрешены (RFC 7230, раздел 3.2.), но действительно необычные.