このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

個別区画化された状態を持つクッキー (CHIPS)

個別区画化された状態を持つクッキーCHIPS区画化クッキーとも呼ばれる)、開発者はクッキーを分割されたストレージに保存でき、最上位サイトごとに個別のクッキー容器が作成されます。

クッキーの区画化が行われない場合、サードパーティクッキーは、サービスがユーザーを追跡し、関連性のないトップレベルサイト間でユーザー情報を関連付けることが可能になります。Partitioned とマークされたクッキーは、それを設定したオリジンおよび最上位ページのオリジンという 2 つのキーで分類されます。

つまり、これらは設定された最上位サイト内でのみ読み取ることができます。これにより、サイト横断的なトラッキングをブロックしつつ、埋め込みマップやチャットウィジェットの状態をドメインおよびそのサブドメイン全体で維持したり、サブリソースの CDN 負荷分散やヘッドレス CMS プロバイダーの設定情報を保持したりするなど、サードパーティクッキーの正当な利用は引き続き可能となります。

CHIPS の動作

CHIPS の仕組みを理解するために、簡単な例を見てみましょう。従来、サイトが <iframe> を介してコンテンツを埋め込む場合、埋め込まれたコンテンツはクロスサイトリクエストに応じて、ユーザーの端末にクッキーを設定することができました。ユーザーが同じコンテンツを埋め込んでいる他のサイトにアクセスすると、埋め込まれたコンテンツは、最初に埋め込まれたコンテンツによって設定されたのと同じクッキーにアクセスすることができました。これにより、コンテンツ所有者は、これらのサイトや、同じコンテンツを埋め込んでいるその他のサイト全体にわたって、ユーザーの行動を追跡することができます。

例を示します。

  1. あるユーザーが https://site-a.example にアクセスし、そこに https://3rd-party.example のコンテンツが埋め込まれていました。https://3rd-party.example は、そのユーザーの端末にクッキーを設定します。
  2. そのユーザーが https://site-b.example にアクセスすると、そこにも https://3rd-party.example が埋め込まれています。この https://3rd-party.example の新しいインスタンスは、ユーザーが前のページにいたときに設定されたクッキーに引き続きアクセスすることができます。

これは、従来のクッキーが、それを設定したサイトのホスト名またはドメイン名に基づくキー、すなわちホストキーを使って保存されてきたためです。上記のケースでは、クッキーは ("3rd-party.example") というキーで保存されることになります。

CHIPS に対応したブラウザーでは、HTTP の Set-Cookie ヘッダーに新しい属性 Partitioned が提供されています。これを設定することで、サイト管理者は CHIPS の利用をオプトインできるようになります。

http
Set-Cookie: __Host-example=34d8g; SameSite=None; Secure; Path=/; Partitioned;

メモ: 区画化されたクッキーは、Secure 属性と共に設定する必要があります。また、区画化されたクッキーを設定する際に __Host 接頭辞を使用すると、現在のドメインまたはサブドメインにのみ関連付けられます。サブドメイン間でクッキーを共有する必要がない場合は、この方法を使用することをお勧めします。

Partitioned が設定されている場合、サードパーティクッキーは、ホストキーと新しい区画キーという 2 つのキーを使用して保存されます。区画キーは、クッキーを設定する URL エンドポイントへのリクエストが行われた時点でブラウザーがアクセスしていた最上位 URL の site(スキームを含む)に基づいて決定されます。

先ほどの例を再確認してみましょう。

  1. ユーザーが https://site-a.example にアクセスすると、そこには https://3rd-party.example のコンテンツが埋め込まれています。https://3rd-party.examplePartitioned を使用してユーザーの端末にクッキーを設定します。これは、サイト所有者が CHIPS への参加を承諾していることを意味します。
  2. この場合、クッキーの保存キーは {("https://site-a.example"), ("3rd-party.example")} となります。
  3. ユーザーが https://site-b.example にアクセスすると、このページにも https://3rd-party.example が埋め込まれていますが、区画キーが一致しないため、この新しい埋め込みインスタンスはクッキーにアクセスできなくなります。

メモ: CHIPS は、Firefox で実装されている状態区画化機構と類似しています。ただし、状態区画化ではデフォルトでサードパーティのコンテキストに対してクッキーの保存領域が区画化されますが、CHIPS ではファーストパーティおよびサードパーティの両方のコンテキストに対して、区画化されたクッキーをオプトインで利用できるようにします。互換性の高い区画化されたクッキーを提供するためには、状態区画化ではなく CHIPS のオプトイン方式を使用することを推奨します。

CHIPS とサブドメイン

CHIPSでは、サイトの異なるサブドメインに埋め込まれたサードパーティのコンテンツが、そのコンテンツによって設定されたサードパーティクッキーにアクセスすることを許可しています。サードパーティのチャットサービスを利用している小売サイトの例を見てみましょう。

  1. あるユーザーが https://shoppy.example にアクセスしました。このサイトには、サポートを必要とするユーザーに対応するため、https://3rd-party.example/chat のサードパーティ製チャットサービスが埋め込まれています。https://3rd-party.example/chat は、異なるサイトのサブドメイン間でチャットの状態を維持するために、Partitioned を使用してユーザーの端末にクッキーを設定します。
  2. このクッキーの保存キーは {("https://shoppy.example"), ("3rd-party.example/chat")} となります。
  3. ユーザーは、https://support.shoppy.examplehttps://checkout.shoppy.example など、https://3rd-party.example/chat を埋め込んでいるさまざまなサブドメインにアクセスします。区画キーが一致しているため、埋め込まれた新しいインスタンスはクッキーにアクセスすることができます。

仕様書

この機能は、どの仕様書にも定義されていません。

ブラウザーの互換性

関連情報