web-dev-qa-db-ja.com

HTTPヘッダー名でアンダースコアが禁止されている理由

数か月前、「SESSION_ID」という名前のカスタムHTTPヘッダーに問題があり、nginxプロキシによって転送されませんでした。

HTTPプロトコルのRFCに従って、アンダースコアは禁止されていると言われました。

グーグルでは、 Apachenginx のようなほとんどのサーバーを違法と定義しています。

RFC2616 セクション4.2

rFC 822 [9]のセクション3.1で与えられたものと同じ一般的な形式に従う

および RFC822

フィールド名は、印刷可能なASCII文字(つまり、33から126の間の値を持つ文字、コロンを除く10進数)で構成する必要があります)

アンダースコアはASCIIテーブル(33〜126の範囲に属する)の10進文字です。何が欠けていますか?

56
white

彼らは禁止されていません。それはCGIのレガシーです。 ここ

underscores_in_headers on;を明示的に設定しない場合、nginxはアンダースコア付きのHTTPヘッダーを静かにドロップします(HTTP標準に従って完全に有効です)。これは、ダッシュとアンダースコアの両方がそのプロセス中にアンダースコアにマッピングされるため、ヘッダーをCGI変数にマッピングする際のあいまいさを防ぐために行われます。

103
Alexey Ten

ヘッダーフィールドにアンダースコアを使用できます( RFC 7230、sec。3.2。 )が、実際には一般的ではありません。

13
Julian Reschke