[1] [CODE(HTTP)@en[[[Set-Cookie2:]]]] [[頭欄]]の [DFN[[CODE(HTTP)@en[Port]] [[属性]]]]は、
[[Cookie]] の適用対象の[[ポート]]を (1個以上) 指定します。

[17] [CODE(HTTP)@en[[[Set-Cookie2:]]]] [[ヘッダー]]がほとんど実装されなかったため、
この[[属性]]もほとんど実装されませんでした。現在広く用いられている
[CODE(HTTP)@en[[[Set-Cookie:]]]] [[ヘッダー]]には、この[[属性]]に相当する機能はありません。

* 仕様書

[REFS[
-[2] [[RFC 2965]]
-- [3] '''[CSECTION@en[3.2.2 Set-Cookie2 Syntax]]'''
-- [12] [CSECTION@en[3.3.1 Interpreting Set-Cookie2]]
-- [13] [CSECTION@en[3.3.2 Rejecting Cookies]]
]REFS]

* 意味

[4] [CODE(HTTP)@en[[[Port]]]] [[属性]]は、その [[Cookie]] を[[応答]]の [CODE(HTTP)@en[[[Cookie:]]]]
[[頭欄]]に含めて返却しても良いような[[ポート]]を指定します [SRC[>>3]]。

* 構文

[5] この[[属性]]の値は省略可能です。省略しない場合、
値は1つ以上の[[ポート]]の番号の[RUBYB[[[読点]]]@en[[[comma]]]]分離の[RUBYB[[[並び]]]@en[list]]でなければなりません。
ポートの番号は [CODE(ABNF)@en[1*[[DIGIT]]]] です。また、[[並び]]は [[ABNF]]
の [CODE(char)[[['''#''']]]] によって記述されていますので、 [CODE(char)[[[,]]]]
の前後に [CODE(ABNF)[[[LWS]]]] を挿入することができます。また、空の項目があっても無視されます
[WEAK[(例えば [CODE(HTTP)[80, , 8000 ]] は [CODE(HTTP)[80,8000]] と同じ意味です)]]。
[SRC[>>3]]

[9] 値を省略しない場合、必ず [CODE(char)[[["]]]] で括っていなければなりません。
[SRC[>>3]]

[10] この種の仕様書でよくある問題ですが、値を [CODE(char)[[["]]]] で括ったものが[[引用文字列]]なのかどうか、
具体的には [CODE(ABNF)[[[quoted-pair]]]] が認められているのかどうかは曖昧です。

[6] [[先導零]]は特に禁止されていません。

[7] ポート番号の順序の意味は特に規定されていません。

* 処理モデル

[11] この''[[属性]]が''省略された場合、[[利用者エージェント]]はその [[Cookie]]
をどの[[request-port]]に対しても返して[['''構いません''']] [SRC[>>12]]。

[14] [CODE(HTTP)@en[[[Port]]]] [[属性]]が[[ポート番号]]を含んでいる場合で、
[[request-port]] がそこに含まれていない場合には、その [[Cookie]]
を[RUBYB[[[蓄積]]]@en[store]]しては[['''なりません''']] [SRC[>>13]]。

* 関連

[15] [[RFC 2109]]、[[RFC 2965]] では[[利用者エージェント]]が返送する時に
[CODE(HTTP)@en[[[Cookie:]]]] に [CODE(HTTP)@en[[[$Port]]]] [[属性]]として含めることになっていました。

* メモ

[8] [[Netscape Cookie]] や [[RFC 2109]] の [CODE(HTTP)@en[[[Set-Cookie]]]]
では[[ポート]]を指定する[[属性]]はありませんでした。どうして欠けていたのでしょうね。

[16] [CITE[APR::Request::Cookie - search.cpan.org]]
( ([TIME[2012-03-04 00:39:16 +09:00]] 版))
<http://search.cpan.org/dist/libapreq2/glue/perl/xsbuilder/APR/Request/Cookie/Cookie.pod>