HTTPヘッダーを解析しています。ヘッダー値を意味のある配列に分割したいと思います。
たとえば、Cache-Control: no-cache, no-store
を返す必要があり['no-cache','no-store']
ます。
HTTP RFC2616 は次のように述べています。
同じフィールド名を持つ複数のメッセージ ヘッダー フィールドは、そのヘッダー フィールドのフィールド値全体がコンマ区切りのリスト [つまり、#(値)] として定義されている場合にのみ、メッセージに存在する場合があります。メッセージのセマンティクスを変更せずに、複数のヘッダー フィールドを 1 つの「フィールド名: フィールド値」のペアに結合できなければなりません。これには、後続の各フィールド値を最初のフィールド値に追加し、それぞれをコンマで区切ります。したがって、同じフィールド名を持つヘッダー フィールドが受信される順序は、結合されたフィールド値の解釈にとって重要であり、メッセージが転送されるときにプロキシはこれらのフィールド値の順序を変更してはなりません (MUST NOT)。
しかし、その逆が正しいかどうかはわかりません。コンマで分割しても安全ですか?
これが問題を引き起こす一例をすでに見つけました。たとえば、私の User-Agent 文字列は
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36
つまり、「KHTML」の後にコンマが含まれています。明らかに、私は複数のユーザー エージェントを持っていないので、このヘッダーを分割しても意味がありません。
User-Agent 文字列は唯一の例外ですか、それとも他にもありますか?