Почему символы подчеркивания запрещены в заголовках 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).
Что мне не хватает?
Ответы
Ответ 1
Они не запрещены. Это наследие CGI. Здесь
Если вы явно не устанавливаете underscores_in_headers on;
, nginx будет молча отбрасывать заголовки HTTP с символами подчеркивания (которые отлично подходят в соответствии со стандартом HTTP). Это делается для того, чтобы предотвратить неоднозначность при сопоставлении заголовков с переменными CGI, так как обе черточки и символы подчеркивания отображаются для подчеркивания в течение этого процесса.
Ответ 2
Подчеркивания полей заголовка разрешены (RFC 7230, раздел 3.2.), но действительно необычные.