HTTPヘッダ名にアンダースコアはダメよ。

とある要件でFOO_BARの様な独自ヘッダを使おうとしてたんですが、途中で捨てられちゃってるような挙動をしていたので調べました。

まず、Webサーバがnginxだったのでオプションを調べたら「underscores_in_headers」なんてのをあっさり見つけたのでこういう仕様なのかと思うも、すぐに納得することが出来なくて、もう少し追うとこんなやりとりを発見しました。

apache – Why underscores are forbidden in HTTP header names – Stack Overflow

Few month ago I had a problem with a custom HTTP header named “SESSION_ID”, not been transfered by nginx proxy.

まさにってことで読み進めるとApacheの方で下記のようなことが書いてありまして、Web依存ではなくHTTPの話だってことが判明。

Environment Variables in Apache – Apache HTTP Server Version 2.5

Starting with version 2.4, Apache is more strict about how HTTP headers are converted to environment variables in mod_cgi and other modules: Previously any invalid characters in header names were simply translated to underscores.

おかしな文字がヘッダ名に含まれていたらアンダースコアに変換することになっているよ。こういう用途に使っているから、最初からアンダースコアを含んでいるヘッダは無視するよ。ということのよう。

ということで、FOO_BARからFOO-BARに変更し、独自ってことで先頭にXを付けてX-FOO-BARにすることで解決しました。

と、ここまで書いて既視感があるのでブログを辿ったのですが、エントリが見つからず。
いつかハマって調べたことがある気がするような、しないような。。。

タイトルとURLをコピーしました