要約

  • RFC 2109 は Set-CookieCookie によって別々の HTTP 要求・応答を論理セッションにまとめ、永続的なネットワーク接続とは明確に切り離した。
  • Domain、Path、Max-Age、Secure とキャッシュ制御が状態の範囲を定め、利用者の制御や自動埋め込み・リダイレクト要求への制限も求めた。
  • Cookie の返送が示すのは利用者エージェントによる状態選択であり、現在の人、十分な同意、認可、鮮度、取引意図、処理結果ではない。

TCP の寿命と買い物の寿命は別だった

RFC 2109 は「セッション」を論理的な文脈として定義した。永続的な接続を指すのではなく、接続の有無は Cookie セッションに影響しない。サーバーが Set-Cookie で始め、利用者エージェントが Cookie を返せば継続し、どちらも終了できる。Max-Age=0 は削除の指示だった。

この区別により、接続がアプリケーション上の権限を背負うことはなかった。TCP が切れてもセッションは続き得る。接続が残っていても、サーバー側のセッションは失効し得る。接続状態、端末の保存状態、サーバーの受理判断は別々に観測すべきである。

Customer はサーバーの語彙だった

例では CustomerPart_NumberShipping が順に保存される。適用可能な要求では、それらが自動的に返る。これは継続性の仕組みをよく示す一方、証拠の限界も示す。

値は利用者エージェントには不透明で、業務上の意味はサーバーが決めた。Customer という名前だけでは現在の人を認証できない。以前に選んだ配送方法は今の承認ではない。HTTP の成功応答だけでは決済や出荷の完了も分からない。

Domain は当時のドメイン一致規則、Path は URI の接頭辞、Max-Age は希望する寿命を表した。Version=1 は方式を識別した。同名 Cookie が複数の Path で一致する場合、より具体的なものが先に並んだ。これは選択規則であって、秘密保持や業務権限の規則ではない。

Secure は助言だった

Secure の説明は慎重である。サーバーは安全な手段を使うよう助言するが、何を安全とみなすかは利用者エージェントが決め得る。属性そのものが暗号化するわけではなく、人を認証したり、一つの操作を最新の委任に結び付けたりもしない。

セキュリティ節は、平文のヘッダーが盗み見や改変にさらされることを別に警告した。Cookie がデータベースキーでも可読な状態でも、受け取ったサーバーには値の検証責任が残る。

キャッシュの共有性を壊さない記憶

状態を URL と文書内容から分離した理由の一つは、キャッシュによる拡張性だった。公開文書は再利用でき、セッション固有の私的文書は共有キャッシュに置かない。プロキシは Cookie を転送し、通常の有効性と privateno-cache="set-cookie" などを守る。

したがって、表現がキャッシュにあること、応答に Set-Cookie があること、ブラウザーが保存したこと、後にオリジンがセッションを受理したことは別事件である。RFC 2068 の HTTP/1.1 キャッシュ語彙がこの分離を支えた。HTTP/1.0 の古いキャッシュは個別ヘッダーを抑止できず、状態を誤って保存する危険があった。

自動送信は最初から利用者制御の問題だった

RFC 2109 は、利用者が事前に URI を確認できる要求を検証可能、埋め込みオブジェクトやリダイレクトの自動要求を検証不能と呼んだ。そして、元の操作と無関係なドメインで Cookie セッションが勝手に始まることを抑え、例外は既定で無効にするよう求めた。

現在の完全なブラウザー安全モデルではないが、核心は鋭い。Cookie は自動送信されるから便利であり、その同じ自動性のために新しい人間の意思を示さない。

利用者は保存・送信を全面停止し、セッションの存在を知り、Domain ごとに保存を制御し、内容を調べられるべきだとされた。本人性がまだ見えなくても追跡は侵入的になり得て、後のフォーム入力が軌跡と人物を結び付けるとも認めた。

RFC 2964 は後に十分な同意を強調し、RFC 2965 は実装経験を受けて RFC 2109 を置き換えた。RFC 6265 と現在の RFC 10025 著者確認稿 はさらに後の世代である。文書の更新は、特定製品の移行完了を証明しない。

記憶の受領証を判断書にしない

記録すべき動詞は、発行、受理、保持、文脈選択、サーバー側セッション受理、認可、コミット、結果観測である。Cookie ヘッダーはその一部しか語れない。

Lu Heng の Running-Code Primacy は稼働事実へ戻ることを求め、Minimum Initial Specification は共通層を最小に保ち、Reality Layers は記録同士の権威の借用を拒む。RFC 2109 は記憶を共通化したが、人の判断まで共通化しなかった。

情報源