6

RFC 6265 では、ユーザー エージェントは Set-Cookie ヘッダーを受信したときに次のように処理する必要があると規定されています。

ドメイン属性が設定されている場合:

  • Cookie のドメインを domain-attribute に設定します。
  • Cookie のホストオンリー フラグを に設定しfalseます。

ドメイン属性が設定されていない場合:

  • Cookie のドメインを正規化された要求ホストに設定します。
  • Cookie のホストオンリー フラグを に設定しtrueます。

これはすべて明らかです。混乱は次の段落で発生します。

ユーザー エージェントが、既に保存されている Cookie と同じ Cookie-name、domain-value、および path-value を持つ新しい Cookie を受信した場合、既存の Cookie は削除され、新しい Cookie に置き換えられます。

ドメインで 2 つの Cookie を受け取った例を見てみましょうwww.example.com

Set-cookie: name=value
Set-Cookie: name=value; Domain=www.example.com

ドメイン (およびパス) は両方の Cookie で同じになりますが、最初の Cookie のホストオンリー フラグは に設定されtrue、2 つ目の Cookie は に設定されfalseます。

RFC を読むと、2 つの Cookie を比較しても問題ないように見えますが、いずれにしても同等と見なされるべきですが、私の解釈が正しいかどうかはわかりません。

ユーザー エージェントは最初の Cookie を 2 番目の Cookie に置き換える必要がありますか、それとも両方を保存する必要がありますか?

4

1 に答える 1

5

あなたを混乱させる段落は、Cookieに新しい値を割り当てる機能(および Cookie の有効期限の変更/更新) に関するものです。そのように記述されていない場合、HTTP クライアントは複数の Cookie を同じ名前で保存する必要があり、次の要求で HTTP サーバーに送信する別の基準を決定する必要があります。

あなたの質問の2番目の部分について:

これらの 2 つの Cookie が同じ要求内で指定されている場合、2 番目の Cookie が「優先」されるため、 を持つ Cookiehost-only-flag = falseが保存されます。

これらの 2 つの Cookie が別々の要求で送信された場合、2 番目の Cookie が最初の Cookie を上書きします。それらを保存するとき、ブラウザの Cookie データベースのエントリは、ホストのみのフラグのみが異なります。

このホストオンリー フラグは、クライアントがサーバーに新しいリクエストを発行したときに有効になります ( RFC6265 のスニペット)。

The user agent MUST use an algorithm equivalent to the following
algorithm to compute the "cookie-string" from a cookie store and a
request-uri:

1.  Let cookie-list be the set of cookies from the cookie store that
    meets all of the following requirements:

    *  Either:

           The cookie's host-only-flag is true and the canonicalized
           request-host is identical to the cookie's domain.

        Or:

           The cookie's host-only-flag is false and the canonicalized
           request-host domain-matches the cookie's domain.

詳細は、ドメインの比較方法にあります。マッチング アルゴリズムは、セクション 5.1.3で指定されています。

基本的に、ドメインが先頭に「.」を付けて指定されている場合、Cookie をすべてのサブドメインに対して有効にすることができます。

ただし、ドメインが省略されている場合 (したがって、リクエストからサーバーによって暗示されている場合) は、ドメイン内に同一の一致が常に存在する必要があるため、これは当てはまりません。

さらなる調査により、次のことが決定されました。

実際には、ブラウザは Cookie で指定されたドメインを先頭に を付けて保存.し (www.example.com保存する.www.example.comため)、 へのリクエストでsubdomain.www.example.comもその Cookie が返されるようにします。ドメインが指定されていない場合、先頭に追加されていないプレーン ドメイン.が保存されるため、サブドメインへのリクエストにはその Cookie が含まれません。

于 2013-05-07T10:45:53.760 に答える