web-dev-qa-db-ja.com

同じ名前で複数のHTTPヘッダーを設定しますか?

私の知る限り、HTTP仕様では、同じ名前の複数のHTTPヘッダーを設定できます。そのための使用例はありますか(クライアントからサーバーへ、またはその逆)。

HTTP 1.1セクション4.2

同じヘッダー名を持つ複数のメッセージヘッダーフィールドは、そのヘッダーフィールドのフィールド値全体がコンマ区切りリストとして定義されている場合にのみ、メッセージ内に存在してもよい[MAY]、[#(values)]。メッセージのセマンティクスを変更せずに、複数のヘッダーフィールドを1つの「フィールド名:フィールド値」ペアに結合し、後続の各フィールド値を最初に追加し、それぞれをコンマで区切ることが可能でなければなりません。したがって、同じフィールド名を持つヘッダーフィールドが受信される順序は、結合されたフィールド値の解釈にとって重要であり、したがって、プロキシは、メッセージが転送されるときにこれらのフィールド値の順序を変更してはなりません。

私が間違っていなければ、同じ名前の複数のヘッダーが必要になることはありません。

44
deamon

ヘッダーが重複すると、さまざまなWebサーバーおよびAPIで問題が発生する可能性があるため(仕様の記載に関係なく)、これがベストプラクティスである一般的なユースケースがあるとは思いません。もちろん、誰かがそれをしていないと言っているわけではありません。

17
heisenberg

Set-Cookie:によく使用されます。多くのサーバーが複数のCookieを設定します。

もちろん、常にすべてを単一のヘッダーに設定できます。

実際、1つのヘッダーに複数のCookieを設定することはできません。それが必要なユースケースです。

Cookie仕様 は、他のヘッダーを結合(カンマ区切り)できるのと同じ方法で1つのヘッダーに複数のCookieを結合できると主張していますが、Expiresパラメーターなどの非準拠構文も指摘しています、その値に,sを含む)はまだ一般的であり、実装で処理する必要があります。

したがって、Set-CookieヘッダーでExpires paramsを使用し、すべてのCookieが同時に期限切れにならないようにするには、おそらく複数のヘッダーを使用する必要があります。

39
sligocki

非常に特定の形式を使用するヘッダーに対してのみ許可されます。 RFC 2616、セクション4.2 を参照してください。

7
Julian Reschke

ユースケースを探しているとき、多分Acceptが有効なものになるでしょう。

  • 承諾:application/json
  • 受け入れる:application/xml
6
André Pena

古いスレッドですが、この同じ問題を調査していました。とにかく、AcceptおよびAccept-Encodingヘッダーは、カンマ区切りの複数の値を使用する典型的な例です。これらがリクエスト固有のヘッダーであっても、仕様はこのレベルでリクエストとレスポンスを区別しません。このページの1つを確認してください。仕様の説明では、ヘッダーの値に文字としてカンマがある場合、コンマの使用を明確にしない限り、同じ名前の複数のヘッダーを使用することはできません。

0
massiAng