[2] [[HTTP]] の [DFN[[CODE(HTTP)@en[[[Cookie2:]]]] [[要求頭欄]]]]は、
[[利用者エージェント]]が対応している [[Cookie]] 仕様の最高の版を示します。

* 仕様書

[REFS[
- [3] [[RFC 2965]]
-- [4] [CSECTION@en[3.3.5  Identifying What Version is Understood:  Cookie2]]
-- [10] [CSECTION@en[9.1  Compatibility with Existing Implementations]]
- [14] [CITE@en[RFC 6265 - HTTP State Management Mechanism]] ([TIME[2012-03-01 09:57:02 +09:00]] 版) <http://tools.ietf.org/html/rfc6265#page-4>
- [18] [CITE@en[RFC 6265 - HTTP State Management Mechanism]] ([TIME[2014-10-12 15:11:47 +09:00]] 版) <http://tools.ietf.org/html/rfc6265#section-9.3>
]REFS]

* 代替

[15] この[[ヘッダー]]は現実にはほとんど利用されておらず、 [[RFC 6265]] により廃止されました [SRC[>>14]]。

* 構文

[5] この[[欄]]には [[Cookie]] の版を[[整数]]で指定します。
[[RFC 2965]] の版は [CODE(HTTP)[[[1]]]] です [SRC[>>4]]。 

;; [12] >>10 にある例示では「[CODE(HTTP)@en[Cookie2: $Version="1"]]」のようになっていて、
矛盾しています。

* 処理モデル

[6] [[クライアント]]は、 [CODE(HTTP)@en[[[Cookie:]]]] 欄を使って1つ以上の [[Cookie]]
を送る場合であって、その [CODE(HTTP)@en[[[$Version]]]] が[[クライアント]]の理解する
[[Cookie]] の版と異なる場合にあっては、[[クライアント]]が理解する最高の [[Cookie]]
の版を [CODE(HTTP)@en[[[Cookie2:]]]] 欄に含めなければ[['''なりません''']] [SRC[>>4]]。

;; [8] どうも [[RFC 2965]] には (その前の [[RFC 2109]] にも) 理解できない
[CODE(HTTP)@en[[[Version]]]] の [[Cookie]] は廃棄しなければならないという規定は無いようなので、
「異なる」というのは 0 だったり 2 だったり、1 以外すべてですね。。。
仮に[[利用者エージェント]]が版 1 と版 4 を理解するとしたら、1 だけを送出するときは
[CODE(HTTP)[[[Cookie2:]]]] を使う必要なない、と。 5 を送出するときは使う必要があるけど。

[9] [CODE(HTTP)@en[[[Cookie2:]]]] を使った [[Netscape Cookie]] から [[RFC 2965]] への [[Cookie]] 
へのアップグレードの方法は次の通りです。
- [11] [[RFC 2965]] に対応した[[利用エージェント]]が [CODE(HTTP)@en[[[Set-Cookie:]]]]
[[頭欄]]だけ ([CODE(HTTP)@en[[[Set-Cookie2:]]]] [[頭欄]]なし) を受け取ったときは、
[[Netscape Cookie]] の [CODE(HTTP)@en[[[Cookie:]]]] [[頭欄]]に加えて
[PRE(HTTP example code)[
[[Cookie2]]: [[$Version]]="1"
]PRE]
のような [CODE(HTTP)@en[[[Cookie2:]]]] [[頭欄]]を送る[['''べきです''']] [SRC[>>10]]。
- [13] [[RFC 2965]] に対応した[[起源鯖]]が >>11 のような [CODE(HTTP)@en[[[Cookie2:]]]]
[[頭欄]]を受け取ったときは、 [CODE(HTTP)@en[[[Set-Cookie:]]]] にかわって
[CODE(HTTP)@en[[[Set-Cookie2:]]]] を使い[[セッション]]を続行する[['''べきです''']] [SRC[>>10]]。

* メモ

[7] [CODE(HTTP)@en[[[Cookie2:]]]] なんていう名前だから [CODE(HTTP)@en[[[Cookie:]]]]
の代替かと思いきや、単に版番号を書くだけなんですね。。。

[1]
[CODE(HTTP)[Cookie2]] 欄なんて対応している UA あるのかよ?と思っていましたけど、ほどほどの頻度で観測されていますね。どんな UA が実装しているのだろう。
([[名無しさん]] [WEAK[2004-04-02 01:27:23 +00:00]])

[16] [CITE[HTTP::Cookies - search.cpan.org]]
( ([TIME[2012-03-04 00:36:16 +09:00]] 版))
<http://search.cpan.org/dist/HTTP-Cookies/lib/HTTP/Cookies.pm>

[17] [CITE[252342 – fix cookie domain checks to not allow .co.uk]]
( ([TIME[2012-03-25 11:29:16 +09:00]] 版))
<https://bugzilla.mozilla.org/show_bug.cgi?id=252342>

[19] [CITE@ja[Cookie2 とは何か | blog.jxck.io]], [[Jxck]], [TIME[2023-08-19T14:57:57.000Z]], [TIME[2023-08-20T04:29:49.898Z]] <https://blog.jxck.io/entries/2023-08-19/cookie2.html>


[20] 
>>19 著者は知ってて冗長になるのを嫌って省いたのかもしれませんけど、
[[RFC 6265]] 制定作業の出発点は [CODE[HttpOnly]] の標準化の動きだった、
という点も抑えておきたかったですね。
当初は新機能だけ規定するつもりで始めたのに、
新機能を追加するべき土台がしっかりしていないとやっぱり駄目だと気づいて[[クッキー]]仕様を全部ちゃんと作ることにした、
という流れを。

;; [21] で、これはもう本当に余談で蛇足なんですけど、 [[XHTML1]] と [[XHTML2]]
の失敗をみて現実路線で [[HTML5]] 仕様を作った [[Ian Hickson]] 
と [[Google]] で一緒に仕事していたのが [[Adam Barth]]。
[[クッキー]]を現実路線で作り直した土台の上で新機能を足していくという方法論は
[[HTML5]] 
の成功をなぞったもの。




