[2] [DFN[[RUBYB[[[節点識別子]]]@en[node identifier]]]]は、 [CODE(HTTP)@en[[[Forwarded:]]]]
[[ヘッダー][HTTPヘッダー]]において[[ホスト]]と[[ポート]]を表す[[識別子]]です。

* 仕様書

[REFS[
- [1] [CITE@en[RFC 7239 - Forwarded HTTP Extension]] ([TIME[2014-09-07 05:21:07 +09:00]] 版) <https://tools.ietf.org/html/rfc7239#section-6>
]REFS]

* 構文

[3] [[節点識別子]]は、節点名と省略可能な[[ポート番号]]を組み合わせたものです。
[[ポート番号]]を指定する場合は間に [CODE(HTTP)[[[:]]]] を置きます。 [SRC[>>1]]

[FIG(railroad)[
= 節点名
= ?
== [CODE(HTTP)[[[:]]]]
== [[ポート番号]]
]FIG]

** 節点名

[8] 節点名は次のいずれかです [SRC[>>1]]。
[FIG(list)[
- [4] [[クライアント]]の[[IPアドレス]]
- [5] [[クライアント]]の[[IPアドレス]]が[[串]]にはわからないことを示す[[字句]]
[CODE(HTTP)@en[[[unknown]]]]
- [6] 追跡やデバッグには使える、内部構造や繊細な情報は隠せる[[字句]]
[CODE(ABNF)@en[[[obfnode]]]]
]FIG]

[7] [[IPアドレス]]は [[RFC 3986]] [CODE(ABNF)@en[[[IPv4address]]]]
または [CODE[''['']] と [CODE['']'']] で括った [[RFC 3986]] [CODE(ABNF)@en[[[IPv6address]]]]
として表します [SRC[>>1]]。

[FIG(railroad)[
= |
== [[IPv4アドレス]]
== =
=== [CODE[''['']]
=== [[IPv6アドレス]]
=== [CODE['']'']]
== [CODE(HTTP)@en[[[unknown]]]]
== [CODE(ABNF)@en[[[obfnode]]]]
]FIG]

[21] [[IPv6アドレス]]の表現は [[RFC 5952]] に従う[['''べき''']]です [SRC[>>1]]。

[22] [[IPアドレス]]は内部ネットワークのものかもしれません [SRC[>>1]]。

;; [9] [[ホスト名]]や[[ゾーン識別子]] ([[RFC 6874]]) は認められていません。
[[ドメイン名]]が使えない点が[[ホストとポート]]とは大きく異なります。

;; [10] [[IPv6アドレス]]は括弧で括られていることにより、
[CODE(ABNF)@en[[[obfnode]]]] は [CODE[[[_]]]] から始まることにより、
いずれで指定されているかは曖昧なく決定できます。

** ポート番号

[11] [[節点識別子]]における[[ポート番号]]は、実際の[[ポート]]を表す5桁[[以下]]の[[ASCII数字]]の列か、
実際の値を隠した [CODE(ABNF)@en[[[obfport]]]] です
[SRC[>>1]]。

[FIG(railroad)[
= |
== 1-5文字の[[ASCII数字]]
== [CODE(ABNF)@en[[[obfport]]]]
]FIG]

;; [12] [CODE(ABNF)@en[[[obfport]]]] は常に [CODE(HTTP)[[[_]]]]
から始まるので、どちらかは曖昧なく決定できます。

;; [17] [[先導0]]は禁止されていません。

* [CODE(HTTP)@en[unknown]]

[23] [DFN[[CODE(HTTP)@en[[[unknown]]]]]] は、識別情報が不明であるときに使います [SRC[>>1]]。

[20] [CODE(HTTP)@en[[[unknown]]]] であっても[[ポート番号]]を指定することはできますが、
その意味は当該[[串]]の管理者によります [SRC[>>1]]。

;; [27] [CODE[Warning:]] [[ヘッダー][HTTPヘッダー]]の[[プロキシの名前]]の構文では、
[CODE[-]] が相当します。

* 難読化識別子

[24] [CODE(ABNF)@en[[[obfnode]]]], [CODE(ABNF)@en[[[obfport]]]] については[[難読化識別子]]を参照。

* 非 IP ネットワークアドレス

[25] [[IPアドレス]]で表せないもの ([[Unixドメインソケット]]や [[NetBIOS]] など)
を使ったアクセスに関して[[節点識別子]]で記述する方法は用意されていないようです。
必要があれば[[難読化識別子]]として表現できそうです。

* 関連

[19] [CODE(HTTP)@en[[[Host:]]]] [[ヘッダー]]の値と似ていますが、
[[ドメイン名]]は使えないことや、[[ポート番号]]の構文がより限定的なこと、
[[難読化識別子]]を使えることが違っています。

[26] 他の[[ヘッダー][HTTPヘッダー]]で使われる似たような値については、
[[プロキシの名前]]を参照。

* 例

[EG[
[18] 次に示すのはいずれも[[節点識別子]]です。

- [13] [CODE(HTTP)[192.0.2.43:47011]] [SRC[>>1]]
- [14] [CODE(HTTP)[[2001:db8:cafe::17]:47011]] [SRC[>>1]]
- [15] [CODE(HTTP)@en[[[unknown]]]]
- [16] [CODE(HTTP)@en[[[unknown]]:1244]]
]EG]
