Cookie
使い方
Cookie ヘッダーは、Set-Cookie レスポンスヘッダーによって以前に保存された名前と値の組を運びます。サーバーが cookie を設定すると、ブラウザは同じドメインへの以降のリクエストに対応する Cookie ヘッダーを含めます。ただし、パス、ドメイン、有効期限の規則に従います。
cookie はステートレスな HTTP プロトコル全体にわたって状態を保持します。一般的な用途には、セッション管理、認証トークン、ユーザー設定、トラッキング識別子があります。サーバーは Cookie ヘッダーを読み取ってクライアントを識別し、セッションのコンテキストを復元したり、保存された設定を適用したりします。
複数の cookie の組は 1 行の Cookie ヘッダーに現れ、セミコロンとスペースで区切られます。この構文は各 cookie の名前と値だけを運びます。Expires、Path、Secure、HttpOnly といった属性は Set-Cookie ヘッダーにのみ存在し、Cookie ヘッダーでは繰り返されません。
Cookie: name1=value1; name2=value2
例
サーバーがレスポンスで 3 つの cookie を設定します。sid cookie はセッション識別子を保持し、lang は言語設定を格納し、theme は表示設定を記録します。
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sid=abc123; Path=/; Secure; HttpOnly
Set-Cookie: lang=en; Path=/
Set-Cookie: theme=dark; Path=/
ブラウザは同じドメインへの次のリクエストに、該当するすべての cookie を含めます。Cookie ヘッダーで送られるのは名前と値の組だけです。
GET /dashboard HTTP/1.1
Host: example.re
Cookie: sid=abc123; lang=en; theme=dark
ログインのエンドポイントへの POST リクエストがセッション cookie を受け取ります。Secure 属性により cookie は HTTPS 経由でのみ送られ、HttpOnly により JavaScript からのアクセスが防がれます。
HTTP/1.1 200 OK
Set-Cookie: token=eyJhbGciOi; Secure; HttpOnly; SameSite=Strict
以降のリクエストは自動的にこのトークンを運びます。
GET /api/profile HTTP/1.1
Host: example.re
Cookie: token=eyJhbGciOi
注意
進行中の cookie 仕様の更新により、SameSite の既定値、__Host- と __Secure- の接頭辞、サードパーティコンテキストの cookie 向けの Partitioned 属性を含む形で cookie の扱いが改訂されています。このドラフトは活発に開発中です。
SameSite の強制
SameSite 属性が設定されていない場合、ブラウザは既定で SameSite=Lax を採用します。これにより、既定でほとんどのクロスサイトの cookie 送信がブロックされます。SameSite=None には Secure フラグが必要です。SameSite の完全なリファレンス
SEO への影響
Googlebot はオリジンが cookie を設定した場合にはそれを送信しますが、個別のクロールセッションをまたいで cookie を保持することはありません。アセット用ドメインで大きな cookie を使うと、レンダリング中のリクエストサイズが増大します。静的アセットに cookie を使わないドメインを用いることで、このオーバーヘッドを回避できます。