[4] [[Cookie]] ははじめに [[Netscape Navigator]] で実装され、開発者向けに仕様案が公開されました。 [[Cookie]] は後に [[IETF]] で標準化されて [[RFC]] となっていましたが [[Netscape]] の仕様と互換性が無いためほとんど無視され、[[Netscape]] の公開した仕様書 (と実装) が事実上の標準になっています。 * 仕様書 - [1] [CITE[Client Side State - HTTP Cookies]] [2] >Preliminary Specification - Use with caution [INS[(予備仕様—心して使うべし)]] と書かれていましたが、この仕様が現在まで事実上の標準となっています。 *BNF ;; Netscape の仕様を元に作成 [PRE(ABNF code)[ http-response /= Set-Cookie http-request /= Cookie Set-Cookie = "Set-Cookie:" set-cookie-content set-cookie-content = [FWS] cookie-pair *([FWS] ";" [FWS] parameter) [FWS] [";"] [FWS] Cookie = "Cookie:" [FWS] cookie-pair *([FWS] ";" [FWS] cookie-pair) [FWS] parameter = expires-parameter / domain-parameter / path-parameter / secure-parameter cookie-pair = name "=" value expires-parameter = "expires=" cookie-date domain-parameter = "domain=" ["."] dot-atom path-parameter = "path=" abs_path secure-parameter = "secure" name = 1*cookie-char value = *cookie-char cookie-date = abs_path = cookie-char = ]PRE] * Cookie の設定 [5] [[Cookie]] を新規または上書きで設定、あるいは削除するには [CODE(HTTP)@en[[[Set-Cookie:]]]] [[応答頭欄]]を使います。 [6] 1つの応答頭に複数あっても良い。 (てことは読点区切り連結に出来るんだろうか?) [7] - [CODE(HTTP)@en[[[Set-Cookie:]]]] [[頭欄]] -- [CODE@en[[VAR[NAME]]=[VAR[VALUE]]]] -- [CODE(HTTP)@en[[[Expires]]]] [[属性]] *domain 属性 cookie は後方一致するドメインについてのみ有効。 > Only hosts within the specified domain can set a cookie for a domain > and domains must have at least two (2) or three (3) periods in them > to prevent domains of the form: ".com", ".edu", and "va.us". Any domain > that fails within one of the seven special top level domains listed > below only require two periods. Any other domain requires at least three. > The seven special top level domains > are: "COM", "EDU", "NET", "ORG", "GOV", "MIL", and "INT". 当該ドメイン中のホストだけが指定ドメイン向けの cookie を設定できて、 しかもドメインは、「.com」, 「.edu」, 「va.us」みたいのを防ぐために、 最低でも 2 つか 3 つの句点 (ピリオド) が無いといけない。 次に挙げる7つの特別最上位ドメインの中に入るドメインだけは、 句点 2 つが必須。その他のドメインは最低 3 つ必要。 7つの特別最上位ドメインは (上記引用文参照)。 ;; その後追加された gTLD はどーするんだろね? [[汎用JPドメイン名]]みたいなところも困りそう。 既定値は HTTP 応答の発行元サーバーのホスト名。 *path 属性 cookie が有効な URI の範囲を指定。 HTTP URL の abs_path と前方一致。 Netscape の仕様にはっきり書いてないけど、必ず「/」で始まるってことになろう。 既定値は cookie を含んでいた文書の URI のもの。 *secure 属性 これがついてたら、安全な場合 (実質 HTTPS のみ) でのみ cookie は送り返される。 既定値はこの属性なし。 (値を取らない属性) *例 -Set-Cookie: CUSTOMER=WILE_E_COYOTE; path=/; expires=Wednesday, 09-Nov-99 23:12:40 GMT -Cookie: CUSTOMER=WILE_E_COYOTE -Set-Cookie: PART_NUMBER=ROCKET_LAUNCHER_0001; path=/ -Cookie: CUSTOMER=WILE_E_COYOTE; PART_NUMBER=ROCKET_LAUNCHER_0001 ;; 以上の例は Netscape の仕様から。日付の年は実際には4桁じゃないと いけないらしい。 * メモ -[[HTTP]] --[[Cookie]] --[[CGI]] --[[HTTP/1.0]] --[[HTTP/1.1]] -[[Netscape Navigator]] -[[Internet Explorer]] [3] 日本語訳 他にも訳があったけど Not found。