-
Notifications
You must be signed in to change notification settings - Fork 4
/
923.txt
162 lines (116 loc) · 7.65 KB
/
923.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
[21] [DFN[[RUBYB[拡張宣言]@en[extension declaration]]]]は、
[[HTTPメッセージ]]に適用される拡張を宣言するものです。
[[HTTPヘッダー]]
[CODE(HTTP)@en[[[Man:]]]], [CODE(HTTP)@en[[[C-Man:]]]],
[CODE(HTTP)@en[[[Opt:]]]], [CODE(HTTP)@en[[[C-Opt:]]]]
は、[[拡張宣言]]を含めるものです。
* 仕様書
[REFS[
- [1] [CITE@en[RFC 2774 - An HTTP Extension Framework]] ([TIME[2014-09-08 03:36:50 +09:00]] 版) <http://tools.ietf.org/html/rfc2774#section-3>
- [19] [CITE@en[RFC 2774 - An HTTP Extension Framework]] ([TIME[2014-09-08 03:36:50 +09:00]] 版) <http://tools.ietf.org/html/rfc2774#section-4>
- [30] [CITE@en[RFC 2774 - An HTTP Extension Framework]] ([TIME[2014-09-08 03:36:50 +09:00]] 版) <http://tools.ietf.org/html/rfc2774#section-5>
- [34] [CITE@en[RFC 2774 - An HTTP Extension Framework]] ([TIME[2014-09-08 03:36:50 +09:00]] 版) <http://tools.ietf.org/html/rfc2774#section-6>
- [39] [CITE[UPnP Device Architecture 2.0]] ([TIME[2014-09-05 02:24:48 +09:00]] 版) <http://upnp.org/specs/arch/UPnP-arch-DeviceArchitecture-v2.0.pdf#page=38>
]REFS]
* 意味
[2] [[拡張宣言]]は、当該[[メッセージ]]に拡張が適用されることを示すとともに、
[[ヘッダー接頭辞]]の[[名前空間]]を予約するものです [SRC[>>1]]。
[10] 拡張は、[[絶対URL]]か[[ヘッダー名]]で識別します。
[[ヘッダー名]]は [[IETF]] [[標準化過程RFC]] で定義された[[ヘッダー]]の名前でなければ[['''なりません''']]。
[SRC[>>1]]
;; [11] [[ヘッダー名]]を指定できるのは、[[絶対URL]]で定義された拡張から [[IETF]]
[[標準化過程RFC]] で規定された標準仕様への移行のためと説明されています [SRC[>>1]]。
[20] [[拡張宣言]]は、[RUBYB[必須]@en[mandatory]]のものと[RUBYB[任意選択]@en[optional]]のものがあります [SRC[>>19]]。
[CODE(HTTP)@en[[[Man:]]]] と [CODE(HTTP)@en[[[C-Man:]]]] には必須の[[拡張宣言]]を指定できます。
[CODE(HTTP)@en[[[Opt:]]]] と [CODE(HTTP)@en[[[C-Opt:]]]] には必須の[[拡張宣言]]を指定できます。
[23] [[拡張宣言]]は、[[ホップ毎]]のものと[[末端対末端]]のものがあります [SRC[>>19]]。
[[ホップ毎]]の[[拡張宣言]]は、当該[[HTTP接続]]にのみ適用されます [SRC[>>19]]。
[CODE(HTTP)@en[[[C-Man:]]]] と [CODE(HTTP)@en[[[C-Opt:]]]] には[[ホップ毎]]の[[拡張宣言]]を指定できます [SRC[>>19]]。
[CODE(HTTP)@en[[[Man:]]]] と [CODE(HTTP)@en[[[Opt:]]]] には[[末端対末端]]の[[拡張宣言]]を指定できます [SRC[>>19]]。
* 構文
[27] 各[[ヘッダー]]の値は、1つ以上の[[拡張宣言]]の[[リスト]] ([CODE(HTTP)[#]])
です [SRC[>>19]]。
[FIG(railroad)[
= [[拡張宣言]]
= *
== [[OWS]]
== [CODE(HTTP)[[[,]]]]
== [[OWS]]
== [[拡張宣言]]
]FIG]
[4] [[拡張宣言]]は、 [CODE[[["]]]] で括った[[絶対URL]]または[[ヘッダー名]]の後に、
0個以上の [CODE(HTTP)[[[;]]]] と[[引数]]を指定したものです [SRC[>>1]]。
;; [6] 仕様書の時代的に構文上明記されていませんが、 [CODE(HTTP)[[[;]]]]
の前後には [[OWS]] が挿入できると思われます。
[FIG(railroad)[
= [CODE[[["]]]]
= |
== [[絶対URL]]
== [[ヘッダー名]]
= [CODE[[["]]]]
= *
== [[OWS]]
== [CODE(HTTP)[[[;]]]]
== [[OWS]]
== [[引数]]
]FIG]
;; [5] [[絶対URL]]は [[RFC 2068]] を通じて [[RFC 1738]] の定義が参照されています。
[[非ASCII文字]]は使えません。
;; [3] [[絶対URL]]は必ず [CODE(URI)[[[:]]]] を含み、[[ヘッダー]]は必ず含まないので、
両者は曖昧なく区別できます。
[7] [[引数]]は、名前のみか、名前と値を [CODE(HTTP)[[[=]]]] で連結したものです [SRC[>>1]]。
[8] 名前は[[字句]]です [SRC[>>1]]。
;; [17] [[大文字・小文字不区別]]と思われますが、明記されていません。唯一定義されている
[CODE(HTTP)@en[[[ns]]]] [[引数]]は構文上不区別となっています [SRC[>>1]]。
[9] 値は[[字句]]または[[引用文字列]]です [SRC[>>1]]。
[FIG(railroad)[
= [[字句]]
= ?
== [CODE(HTTP)[[[=]]]]
== |
=== [[字句]]
=== [[引用文字列]]
]FIG]
* 文脈
[26] 任意選択の[[拡張宣言]]は、どの[[HTTPメッセージ]]にも指定できます [SRC[>>19, >>34]]。
[28] [CODE(HTTP)@en[[[C-Man:]]]], [CODE(HTTP)@en[[[C-Opt:]]]] およびこれらで宣言された[[ヘッダー接頭辞]]から始まる[[ヘッダー]]の名前は、
[CODE(HTTP)@en[[[Connection:]]]] に指定しなければ[['''なりません''']] [SRC[>>19]]。
[31] 必須の[[拡張宣言]]を含む[[要求]]を[RUBYB[必須要求]@en[mandatory request]]といいます。
必須要求の[[要求メソッド]]は [CODE(HTTP)[[[M-*]]]] でなければ[['''なりません''']]。 [SRC[>>19]]
[35] [[鯖]]は、必須の要求に対する[[応答]]で、または対応していることが事前に分かっている[[受信者]]に対してを除き、
必須の[[拡張宣言]]を送信しては[['''なりません''']] [SRC[>>34]]。
[40] [[SSDP]] の [CODE(HTTP)@en[[[M-SEARCH]]]] [[要求]]でも使います [SRC[>>39]]。
* 処理モデル
[25] 任意選択の[[拡張宣言]]の[[受信者]]は、拡張で指定された規則に従っても構いませんし、
拡張を無視しても構いません [SRC[>>19, >>30]]。
[24] 必須の[[拡張宣言]]の[[受信者]]は、拡張で指定された規則に従わなければ[['''なりません''']] [SRC[>>19, >>30]]。従えない時は、 [CODE(HTTP)[[[510]]]]
[[応答]]を返さなければ[['''なりません''']] [SRC[>>30]]。
[29] [[末端対末端]]または[[ホップ毎]]の必須の[[拡張宣言]]を受信し、
その拡張をすべて理解して処理できた[[鯖]]は、
[[応答]]にそれぞれ [CODE(HTTP)@en[[[Ext:]]]] と [CODE(HTTP)@en[[[C-Ext:]]]]
を指定しなければ[['''なりません''']] [SRC[>>30]]。
;; [33] [CODE(HTTP)@en[[[Ext:]]]] も参照。
[32] 必須の[[拡張宣言]]を処理する[[受信者]]でない[[串]]は、
[[転送]]時に[[拡張宣言]]を削除しては[['''なりません''']] [SRC[>>30]]。
[36] [[クライアント]]が理解できない、または使いたくない必須の[[拡張宣言]]が[[応答]]に含まれていた場合には、
[CODE(HTTP)[[[500]]]] [[応答]]が返されたかのように扱う[['''べきです''']] [SRC[>>34]]。
* 引数
[12] 構文上 [CODE(HTTP)@en[[[ns]]]] が最初の[[引数]]でなければならないようになっています [SRC[>>1]]。
;; [13] 実際に順序に意味があるのかは不明です。
[14] 拡張の[[引数]]を使っても構いませんが、受信者が認識することは保証できません。
拡張の[RUBYB[実現値データ]@en[instance data]]を伝えるために[[引数]]を使っては[['''なりません''']]。 [SRC[>>1]]
;; [18] [[引数]]の名前が重複して良いのかは不明です。
[15] 未知の[[引数]]は無視する[['''べきです''']] [SRC[>>1]]。[[串]]は[[転送]]時に削除しては[['''なりません''']]
[SRC[>>1]]。
[16] 次の[[引数]]があります。
[FIG(short list)[
- [CODE(HTTP)@en[[[ns]]]]
]FIG]
* 歴史
[38] [[RFC 4229]] が [[RFC 2774]] を出典にこれら4[[ヘッダー]]を状態「[[実験的]]」
で[[IANA登録簿]]に登録しています [SRC[>>37]]。
[REFS[
- [37] [CITE@en[RFC 4229 - HTTP Header Field Registrations]] ([TIME[2014-11-02 18:53:20 +09:00]] 版) <http://tools.ietf.org/html/rfc4229>
]REFS]
* 関連
[22] 意味的には[[XML名前空間]]の[[名前空間宣言]]と似ています。