1. ホーム
  2. http

[解決済み] ブラウザのCookieドメインはどのように機能するのですか?

2022-03-23 02:06:18

質問

ドメイン/サブドメインCookieの奇妙な問題が発生したため、ブラウザがCookieをどのように扱うかを知りたいです。もし、ブラウザによってやり方が違うなら、その違いも教えてもらえると助かります。

言い換えれば、ブラウザがクッキーを受け取ったとき、そのクッキーにはドメインとパスが付加されていてもよい(MAY)。あるいは、そうでない場合、ブラウザはおそらく何らかのデフォルトをそれらに代用します。質問1:それらは何ですか?

その後、ブラウザはリクエストを行おうとするとき、クッキーをチェックし、そのリクエストのために送信すべきクッキーをフィルタリングします。これは、リクエストのパスとドメインに照合することで行われます。質問2:マッチングルールとは何ですか?


追加しました。

なぜこのような質問をするかというと、いくつかのエッジケースに興味があるからです。例えば

  • に対するクッキーは、このままでは .example.com に使える www.example.com ?
  • に対するクッキーは作成されるのでしょうか? .example.com に使える example.com ?
  • に対するクッキーは作成されるのでしょうか? example.com に使える www.example.com ?
  • に対するクッキーは作成されるのでしょうか? example.com に使える anotherexample.com ?
  • ウィル www.example.com にクッキーを設定することができます。 example.com ?
  • ウィル www.example.com にクッキーを設定することができます。 www2.example.com ?
  • ウィル www.example.com にクッキーを設定することができます。 .com ?
  • などなど。

2を追加しました。

また、どのようにクッキーを設定すればよいのか、どなたかご教示ください。

  • のどちらかによって設定することができます。 www.example.com または example.com ;
  • の両方からアクセス可能です。 www.example.comexample.com .

解決方法は?

がありますが RFC 2965 ( Set-Cookie2 はすでに廃止されていました。 RFC 2109 を参照)。 べきである はクッキーを定義していますが、ほとんどのブラウザはこれを完全にサポートしておらず、ただ Netscape社によるオリジナル仕様 .

という区別があります。 ドメイン 属性の値と有効なドメインがあります。 Set-Cookie ヘッダーフィールド、後者はその属性値の解釈である。RFC2965によると、以下のようになるはずです。

  • もし セット-クッキー ヘッダーフィールド はしません。 があります。 ドメイン 属性の場合、有効なドメインはリクエストのドメインとなります。
  • がある場合 ドメイン 属性が存在する場合、その値が有効なドメインとして使用されます (その値が . はクライアントによって追加されます)。

有効なドメインを持つことで、さらに ドメインマッチ そうでない場合、クッキーは修正されます。そうでなければ、クッキーは修正されます。同じルールが、リクエストで送信されるクッキーの選択にも適用されます。


この知識をご質問の内容に当てはめると、以下のようになります。

  • を使ったクッキー Domain=.example.com 意志 使える www.example.com
  • とのクッキー Domain=.example.com 意志 使える 例.com
  • とのクッキー Domain=example.com に変換されます。 .example.com というように にも使用できます。 www.example.com
  • とのクッキー Domain=example.com 意志 ない に使える anotherexample.com
  • www.example.com 意志 にクッキーを設定することができます。 例.com
  • www.example.com ウィル ない にクッキーを設定することができます。 www2.example.com
  • www.example.com ウィル ない にクッキーを設定することができます。 .com

また、Cookieを設定し、読み取るには、以下のようにします。 www.example.com example.com に設定します。 .www.example.com.example.com をそれぞれ作成します。しかし、最初の( .www.example.com ) は、そのドメイン以下の他のドメインにしかアクセスできなくなります (例. foo.www.example.com または bar.www.example.com ) ここで .example.com は、以下の他のドメインからもアクセスすることができます。 例.com (例) foo.example.com または bar.example.com ).