HTTPとCookieの仕組みとは?
図解でわかる初心者向け完全ガイド
「Cookieって何?」「一度ログインしたサイトは、なぜ自分の事を覚えているの?」と疑問に思った事はありませんか。
WebサイトではHTTPプロトコル という通信ルールを使って、ブラウザとサーバーがデータをやり取りしています。
ただし、HTTP自体は過去の通信を自動的に記憶しません。
そこで活躍する仕組みのひとつがCookie(クッキー) です。
この記事では、基礎知識から通信ヘッダーの例、セッションとの違い、セキュリティ対策、Chromeでの確認方法まで、専門用語をできるだけかみ砕いて説明します。
- HTTP: ブラウザが要求し、サーバーが応答する通信ルール。
- Cookie: 小さな情報をブラウザに保存し、条件に応じて後のリクエストでも送る仕組み。
- セッション: ログイン状態など、利用者に関する一連の状態を管理する仕組み。
HTTPプロトコルとは?基本的な仕組み
HTTPはブラウザとサーバーの通信ルール
HTTP(Hypertext Transfer Protocol)は、Web上で情報をやり取りするためのルールです。
ブラウザでページを開くと、ブラウザはサーバーにページのデータを求めます。
サーバーはHTMLなどの情報を返し、ブラウザが画面に表示します。
この「送ってください」という要求がHTTPリクエスト 、「こちらがデータです」という返答がHTTPレスポンス です。
WebページではHTMLに加えて画像、CSS、JavaScriptを取得するため、複数の通信が行われる事があります。
HTTPが「ステートレス」と呼ばれる理由
HTTPにはステートレス という特徴があります。
簡単に言えば、それぞれの要求は独立しており、HTTP自体が前回のアクセスを自動で覚えている訳ではありません。
例えばログイン後に別のページを開いても、そのページへの要求だけでは「前にログインした人と同一人物か」を判断出来ません。
利用者を関連付ける仕組みが必要になり、その代表例がCookieとセッション管理です。
なお、現在多くのサイトで利用されるHTTPSは、HTTPをTLSで暗号化して通信する方式です。
Cookieも重要な識別情報を扱うため、HTTPSが基本になります。
Cookieとは?保存される情報と用途
Cookieに何が保存されるのか
Cookieは、Webサイトがブラウザに保存させる、名前と値を中心とする小さなデータです。
Cookieは情報その物を全て記録するよりも、利用者を識別するためのIDや、好みの設定などに使われます。
| Cookieの情報例 | 用途 |
|---|---|
| セッションID | サーバー側のログイン状態を確認する |
| language=ja | 表示言語を日本語にする |
| theme=dark | ダークモードの設定を保持する |
| カート識別子 | 買い物中のカート情報を呼び出す |
| 分析用の識別子 | サイト利用状況を分析する |
図書館の利用者カードをイメージすると分かり易いでしょう。
カードの番号を手掛かりに、図書館の管理システムで貸出状況を確認出来ます。
Cookieも、ブラウザにあるIDをサーバーが受け取って利用者の状態を調べる事があります。
Cookieが使われる3つの場面
① セッション管理: ログイン状態や買い物中の状態を継続するために利用します。Cookieを使って識別子を送れば、ページを移動するたびに利用者を照合できます。
② パーソナライズ: 言語や画面テーマなど、サイトの表示を利用者の好みに合わせるために利用します。
③ トラッキング: ページの利用状況や広告の効果を測定するために利用されます。ただし、サイトをまたいだ追跡はプライバシー上の問題を招く可能性があります。
HTTPとCookieが連携する仕組み【図解】
発行・保存・再送信の5ステップ
Cookieは、サーバーのSet-Cookie レスポンスヘッダーを通じて設定され、次の通信ではブラウザのCookie リクエストヘッダーで送信されます。
- ブラウザがWebページを要求する。
- サーバーがレスポンスに
Set-Cookieを付ける。 - ブラウザが指定条件に従ってCookieを保存する。
- 次の通信で、送信条件に合うCookieを
Cookieヘッダーに含める。 - サーバーは受け取った情報を元に応答する。
ただし、Cookieは毎回必ず送られる訳ではありません。
Domain、Path、有効期限、SameSite、Secure、ブラウザ側の制限などによって送信条件が決まります。
Set-CookieとCookieヘッダーの実例
サーバーからブラウザへの応答:
HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: theme=dark; Path=/; Max-Age=86400
これは「テーマをダークモードに設定し、有効期間は24時間」とする例です。次のリクエストでは、条件に合えば以下の様に送信されます。
GET /mypage HTTP/1.1
Host: example.com
Cookie: theme=dark
| 項目 | Set-Cookie | Cookie |
|---|---|---|
| 方向 | サーバー → ブラウザ | ブラウザ → サーバー |
| 場所 | レスポンスヘッダー | リクエストヘッダー |
| 役割 | 保存・更新を指示 | 保存した値を送信 |
| 属性 | Max-Age、Pathなどを指定可 | 通常は名前と値を送る |
Cookieとセッションの違い
ログイン状態を維持する仕組み
多くのWebサービスでは、ログインに成功するとサーバーがセッションを作成します。
そのセッションを探すためのセッションID を発行し、ブラウザにはCookieで保存します。
ブラウザは次回以降のリクエストでIDを送り、サーバーは対応するセッションが有効かを確認します。
これにより、ページを移動してもログイン状態を維持出来ます。
この方式では、Cookieその物にパスワードを保存する必要はありません。
ただし、全ての認証方式でサーバー側のセッション保存を使うとは限らず、署名済みトークンなどを利用する設計もあります。
Cookie・セッション・localStorage・キャッシュを比較
| 技術 | 主な役割 | 場所 | HTTPで自動送信 |
|---|---|---|---|
| Cookie | 識別情報や設定の保存・送信 | ブラウザ | 条件に合えば送信 |
| セッション | 一連の利用者状態の管理 | 実装による(サーバー側など) | セッションそのものは送信しない |
| localStorage | Webアプリのデータ保存 | ブラウザ | 自動送信しない |
| キャッシュ | 取得済みデータの再利用 | ブラウザなど | HTTPキャッシュの仕組みに従う |
セッションCookieと永続Cookie
セッションCookie には明示的な期限がなく、一般的にはブラウザセッションが終わるまで保持されます。
ただし、ブラウザのセッション復元機能でCookieが復元される場合があります。
永続Cookie はExpires やMax-Age で保存期間を指定した物です。
例えば表示言語を翌日も引き継ぐ場合に使えます。
Cookieが残っていてもサーバー側のログイン状態が期限切れなら再認証が必要です。
Cookie属性と安全な設定方法
属性の意味と具体例
| 属性 | 意味 | 例 |
|---|---|---|
| Domain | 送信先ドメインの範囲 | Domain=example.com |
| Path | 対象となるURLパス | Path=/shop |
| Expires | 有効期限の日時 | Expires=... |
| Max-Age | 有効期間(秒) | Max-Age=3600 |
| Secure | 原則HTTPSで送信 | Secure |
| HttpOnly | JavaScriptからの直接読み取りを制限 | HttpOnly |
| SameSite | サイト間リクエストでの送信制御 | SameSite=Lax |
| Partitioned | トップレベルサイト別にCookieを分離 | Partitioned |
Domain を省略すると通常は設定したホストに限定され、Path は送信対象のURL範囲を指定します。ただし、Pathはセキュリティ上の強固なアクセス制御ではありません。Expires とMax-Age の両方がある場合、Max-Ageが優先されます。
Secure・HttpOnly・SameSiteをどう使う?
Secure は原則HTTPSだけで送る設定です。HttpOnly はJavaScriptからの直接読み取りを制限します。
SameSite は異なるサイトからのリクエストにCookieを送るかを制御します。
| SameSite | 動作 |
|---|---|
| Strict | 基本的に同一サイトのリクエストのみ |
| Lax | 同一サイトに加え一部のトップレベル遷移を許可 |
| None | サイト間でも送信対象にできるが、Secureが必要。ブラウザの追跡防止設定で制限される場合あり |
安全なログイン用Cookieの一例は次のとおりです。
Set-Cookie: __Host-session=RANDOM_SESSION_ID; Path=/; Secure; HttpOnly; SameSite=Lax
__Host- 接頭辞を利用したCookieは、対応ブラウザでSecure、Path=/、Domain属性無しなどの制約を受けます。
セッションIDには推測困難な値を使い、ログイン成功後のID再発行やサーバー側の失効処理なども重要です。
Cookieのセキュリティとプライバシー
Cookie自体はウイルスではない
Cookieは小さなデータであり、それ自体がウイルスとして動作する物ではありません。
しかし認証用Cookieが盗まれると、不正なログイン操作に悪用される可能性があります。
| リスク | 概要 | 代表的な対策 |
|---|---|---|
| セッションハイジャック | 盗まれたセッションIDの悪用 | HTTPS・HttpOnly・適切な失効管理 |
| XSS | 悪意あるJavaScriptを実行させる | 安全な出力処理・CSPなど |
| CSRF | 利用者が意図しない操作の送信 | SameSite・CSRFトークン |
| セッション固定攻撃 | 攻撃者が用意したIDを利用させる | 認証後のID再発行 |
| 行動追跡 | 訪問履歴などの関連付け | Cookie設定と追跡防止の確認 |
利用者側では、ブラウザの更新、不審なリンクを避ける事、共用端末でのログアウトが基本的な対策です。
ファーストパーティとサードパーティCookie
ファーストパーティCookie は、閲覧中のサイトと同じサイトに関係するCookieです。ログインや設定保存などに使われます。
サードパーティCookie は、閲覧中とは別のサイトに関係するCookieで、外部広告などに使われてきました。プライバシー上の問題があるため、ブラウザによってブロックや分離などの措置が行われています。ただし制限内容はブラウザ・設定・利用環境によって異なります。
Cookieの同意画面では、必須の機能用Cookieと広告・解析用Cookieの役割を分けて確認すると判断し易くなります。
ChromeでCookieを確認・削除する方法
デベロッパーツールで確認する
- Google Chromeで確認したいWebサイトを開きます。
- Windowsなら
F12またはCtrl + Shift + Iで開発者ツールを開きます(MacはCommand + Option + I)。 - Application → Storage → Cookies を開き、確認したいオリジンを選びます。
- CookieのName、Value、Domain、Path、Expires、Secure、HttpOnlyなどを確認します。
- さらにNetwork タブで通信を選ぶと、リクエストの
CookieやレスポンスのSet-Cookieも確認出来ます。
削除・無効化するとどうなる?
Cookieを削除すると、ログアウト状態になったり、言語・画面テーマの設定が戻ったり、ショッピングカートの状態に影響したりする事があります。
一方で、サーバー側の会員情報や購入履歴まで自動的に削除される訳ではありません。
Cookieを無効にするとログイン出来無いサービスもあります。
また、Cookie以外の保存・識別技術も存在するため、Cookie削除だけで追跡を完全に止められるわけではありません。
HTTPとCookieについてよくある質問
Q1. Cookieを許可すると個人情報が全部送られますか?
いいえ。Cookieの許可だけで端末のす全ての個人情報が送信される訳ではありません。ただし、識別子がサイト側の利用者情報と関連付けられる事はあります。
Q2. Cookieはウイルスですか?
いいえ。Cookieは主に小さなデータです。ただしCookieの識別情報が不正に利用されるリスクはあります。
Q3. Cookieを拒否してもログイン出来ますか?
Webサービスによります。Cookieに依存した認証方式では、ログイン状態を保てない場合があります。
Q4. Cookieとキャッシュは同じですか?
異なります。Cookieは利用者識別や設定など、キャッシュは画像やCSSなど取得済みデータの再利用が中心です。
Q5. Cookieはどこに保存されますか?
ブラウザが管理する保存領域に記録されます。開発者ツールで閲覧出来る場合があります。
Q6. シークレットモードでもCookieは使いますか?
利用中はCookieが使われる場合があります。通常の閲覧環境とは保存が分離され、シークレットセッション終了後には基本的に削除されます。
Q7. Cookieは毎回サーバーに送信されますか?
いいえ。Domain、Path、有効期限、Secure、SameSite、ブラウザの制限などの条件に合う場合だけ送られます。
まとめ:HTTPは通信、Cookieは状態を引き継ぐ仕組み
HTTPはブラウザとサーバーがリクエストとレスポンスで情報をやり取りするためのルールです。
一方でHTTP自体は過去の通信を自動では覚えません。
Cookieはブラウザに小さな情報を保存し、後の通信でサーバーに送る事で、ログイン状態の維持や表示設定などを可能にします。
Set-Cookie はサーバーからブラウザ、Cookie はブラウザからサーバーに向かうと覚えましょう。
また、安全に利用するためにはHTTPSとSecure、HttpOnly、SameSiteなどを適切に組み合わせ、サーバー側でもセッション情報を守る事が大切です。
コメント