なぜCookieが生まれたか
ショッピングカートが動く理由をたどると、ステートレスなHTTPに状態を足す発明にたどり着く。Cookie誕生の経緯と、追跡への転用・廃止の流れまで一気に掴める。
- HTTPはステートレスなため、標準のままでは前後のリクエストを結びつけてカートやログイン状態を扱えない。
- Cookieは1994年にNetscapeが実装した。ブラウザへ小さな識別子を預け、同じサイトへのリクエストで送り返す。
- 第三者による追跡にも転用され、GDPR、SameSite、サードパーティCookie廃止などのプライバシー対策につながった。
結論:ステートレスなHTTPに「記憶」を後付けした発明
Cookieは、状態を持たないHTTPの上でサーバーがクライアントを識別し続けるために生まれた仕組みです。HTTPは設計上、1つのリクエストとレスポンスで完結し、次のリクエストとの関係を一切保持しません。ところが1994年、Webが文書閲覧から電子商取引へ広がると、「同じ人が続けて操作している」という状態がどうしても必要になりました。NetscapeのLou Montulliが出した答えが、サーバーが小さなデータをブラウザに預け、以後のリクエストで自動的に送り返させるCookieです。プロトコル本体は無状態のまま、状態を端末側に外出しすることで両立させた——これが本質です。
当時の状況と競合:カートを持てないプロトコル
初期のHTTP(HTTP/0.9〜1.0)は、接続してGETし、応答を受け取ったら切断する、それだけのプロトコルでした。TCP接続すら1リクエストごとに使い捨てで、サーバーから見れば全リクエストが見知らぬ相手からの初対面です。この徹底したステートレス性には理由がありました。サーバーがクライアントごとの状態を抱えないため、実装が単純で、負荷分散もキャッシュも容易、障害にも強い。Web黎明期にスケールした一因はこの割り切りにあります。
問題は、ショッピングカートのように「複数リクエストにまたがる継続状態」を表せないことでした。当時の回避策には難がありました。
| 手法 | 状態の置き場所 | 弱点 |
|---|---|---|
| URLへ埋め込む | URLパラメータ | URLが汚れ、共有・ブックマークで漏洩。ページ遷移ごとに引き回しが必要 |
| hidden フォーム項目 | HTMLの隠しフィールド | GET主体のリンク遷移では継続せず、POSTを挟む画面設計に縛られる |
| サーバー側で全状態保持 | サーバーのメモリ/DB | 誰の状態かを結ぶ鍵が別途必要で、無状態設計の利点を失う |
いずれも「その1回のリクエストが誰のものか」をサーバーが安定して知る手段がない点で行き詰まります。必要だったのは、リクエストをまたいでクライアントを識別する軽量な鍵でした。
決定打・経緯:マジッククッキーの転用
1994年、Netscapeはブラウザ Mosaic Netscape(後のNavigator)を開発する中で、この識別問題に直面します。直接のきっかけは、Netscapeが手がけた電子商取引システムでした。顧客だったMCIが「取引の途中状態をサーバー側に抱えたくない」と求めたため、状態を各利用者の端末に保存する方式が必要になったのです。この課題に対し、エンジニアの Lou Montulli が John Giannandrea とともに仕様を起草し、実装しました。着想の核は、UNIXの世界で古くから使われていた「マジッククッキー(magic cookie)」——プログラム間で受け渡される、中身を詮索しない不透明なトークンです。Montulliはこの概念をHTTPに持ち込みました。
動作は素朴です。サーバーはレスポンスヘッダで値を渡し、ブラウザは以後、同じサーバー宛のリクエストヘッダにその値を自動で添えます。
# サーバー → ブラウザ(状態を預ける)
HTTP/1.0 200 OK
Set-Cookie: session=abc123; path=/; expires=Wed, 09 Jun 1995 10:18:14 GMT
# ブラウザ → サーバー(以後のリクエストで送り返す)
GET /cart HTTP/1.0
Cookie: session=abc123
サーバーはこの session=abc123 を鍵に、自分の側に置いたカート内容と結びつけます。プロトコルは無状態のまま、状態を指し示す小さな識別子だけをクライアントに持たせる——分業の妙です。Cookieは1994年10月のMosaic Netscape 0.9ベータに載って世に出ました。
最初の定義はNetscapeの暫定仕様書でした。IETFが RFC 2109(1997)で標準化し、続く RFC 2965(2000)は Set-Cookie2 を導入しましたが実装がほとんど普及せず、事実上失敗しました。最終的に RFC 6265(2011)が「実際にブラウザが動かしている挙動」を追認する形で規定し、現行標準となっています。理想を先に決めるのではなく、動いている現実を標準に落とし込んだ点が象徴的です。
今への影響と教訓:状態を足した代償
横にスクロール
Cookieはログイン維持からカート、パーソナライズまで、動的Webの土台になりました。しかし同じ「リクエストをまたいで識別する」力は、副作用を生みます。あるページに埋め込まれた別ドメインの画像や広告(サードパーティ)も自分のCookieを読み書きできるため、複数サイトにまたがる同一ドメインの部品が、利用者の足取りを横断的に突き合わせられる。これがサードパーティCookieによる追跡です。当初は状態管理の道具だったものが、広告エコシステムでは行動データの収集基盤へと転用されました。
その反動が、現在も続く規制と技術対応の連鎖です。
- 法規制:EUのePrivacy指令(2002年、2009年改正の通称「Cookie法」)が同意取得を求め、GDPR(2018年施行)が識別子を個人データとして扱った。世界中のサイトに並ぶ「同意バナー」はこの帰結です
- 技術的緩和:クロスサイト送信を制御する
SameSite属性(Lax/Strict/None)が追加され、CSRF対策と追跡抑制を兼ねる。ChromeはSameSiteの既定を実質Laxへ寄せ、Secure前提のSameSite=Noneでしか無条件のクロスサイト送信を許さなくした - 廃止の動き:Safari(ITP、2017年)とFirefox(ETP、2019年)はサードパーティCookieを既定で制限。Googleも段階的廃止を掲げたが延期を重ね、方針は流動的なまま。追跡の受け皿はCookieから他の識別手段やプライバシー保護型APIへ移りつつあります
「悪いのはサードパーティCookie、良いのはファーストパーティ」と語られがちですが、両者はメカニズムとして同一です。違いはCookieの持ち主のドメインが、いま見ているサイトと一致するか否かだけ。追跡問題はCookieという技術の欠陥ではなく、無状態プロトコルに識別子を持たせた設計が、閲覧文脈をまたいで悪用されうるという構造的な帰結です。
教訓は普遍的です。ステートレスな設計は単純さ・スケーラビリティ・堅牢さと引き換えに状態を捨てており、そこへ後から状態を足すと、識別の仕組みが同時に「追跡の仕組み」にもなる。識別と追跡は表裏一体で、便利さの裏には必ず監視の可能性が同居します。Cookieの30年は、プロトコルに欠けた能力を後付けする際、その能力が誰にどう使われうるかまで含めて設計しなければならない、という重い教訓を残しました。
Cookieが支える通信そのものの仕組みはWebとネットワークを、セッション固定化やCSRFなど識別子を狙う攻撃と対策はセキュリティを参照してください。
- HTTPがステートレスである理由(単純さ・スケーラビリティ・堅牢さ)と、それゆえカート等の継続状態を表せなかった問題
- CookieはNetscapeのLou Montulliが1994年に考案。名称はUNIXの「マジッククッキー」に由来
- 標準化の系譜:Netscape暫定仕様 → RFC 2109 → RFC 2965(不採用)→ RFC 6265(現行、実挙動の追認)
- サードパーティCookieによる横断追跡と、SameSite属性・ePrivacy指令/GDPR・廃止の動きという対応の流れ
一段で言うと
HTTPはあえて記憶を持たないプロトコルとして生まれ、その割り切りがWebをスケールさせました。しかしカートやログインには継続する状態が要る。Lou Montulliはプロトコルを無状態のまま保ち、状態を指す小さな鍵だけを端末に預けることで難題を解きました。その同じ鍵がやがて横断追跡の道具になり、規制と廃止の時代を招いた。単純さのために捨てた状態を後付けする代償は、識別と監視が分かちがたく結びつくことだった——これがCookieが教える最大の原則です。
なぜ?の記事ガイド
なぜCookieが生まれたかを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
Cookie
比較で見る軸
難易度: advanced / カテゴリ: なぜ? / タグ数: 6
導入後に効く点
Cookieは1994年にNetscapeが実装した。ブラウザへ小さな識別子を預け、同じサイトへのリクエストで送り返す。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- なぜ?
- タグ数
- 6
判断チェックリスト
- 自社の用途が「Cookie / HTTP」に近いか確認する。
- 強みである「HTTPはステートレスなため、標準のままでは前後のリクエストを結びつけてカートやログイン状態を扱えない。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。