Tomcat7 とRFC違反のCookie
業務の都合で、Tomcat7でRFC違反のCookieを発行しなければならなくなった。
具体的には、値に"="を含むCookieをダブルクォートで囲まずに発行せよ、とのことである。
Tomcat7では通常RFCに従い、"="のような特殊なセパレータ文字を含むCookie値が許可されることはなく、ダブルクォーテーションによって囲まれる。
これを嫌い、ダブルクォートで囲まれないようにするための実装について記す。
Tomcat 7 では(Tomcat HOME)/conf/catalina.propertiesに記載された設定値によって、発行するCookieに以下のように制約が生じる。
なお、デフォルトでは両設定値ともfalseとなる。
パターン①
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
又は
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=true
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=true
→',', ';', ' ', '\t'が含まれている場合ダブルクォートで囲う
パターン②
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=false
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=false
→ '\t', ' ', '\"', '(', ')', ',',':', ';', '<', '=', '>', '?', '@', '[', '\', ']', '{', '}'が含まれている場合ダブルクォートで囲う
パターン③
org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0=false
org.apache.tomcat.util.http.ServerCookie.FWD_SLASH_IS_SEPARATOR=true
→パターン②に加え、'/'が含まれている場合にはダブルクォートで囲う。
従って、Tomcat 7系では"="に限らず、主要なセパレータを含む値をCookieにセットしたい場合、org.apache.tomcat.util.http.ServerCookie.ALLOW_HTTP_SEPARATORS_IN_V0をtrueにセットすることで目的を達成することが出来る。
なお、TomcatでこれらRFC違反のCookieを受け付けられるか、という点は未検証である。
従って別途注意が必要である。
※恐らく上記設定値に従うと思われるが。。。
私が参考にしたのはTomcat Ver 7.0.47のソースコードであるが、恐らく7系ではこの制約は同じものと思われる。
細かいマイナーバージョンでの動作を確認したい場合は、各自ソースコードを参照されたし。
なお、Tomcat v6やv8のソースコードは読んでいないため、仕様が本記事と異なる可能性がある。
Author And Source
この問題について(Tomcat7 とRFC違反のCookie), 我々は、より多くの情報をここで見つけました https://qiita.com/cacahuatl/items/3121511185859e8e3be3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .