-
Notifications
You must be signed in to change notification settings - Fork 4
/
923.txt
132 lines (95 loc) · 5.6 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
[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>
]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]]。
[28] [CODE(HTTP)@en[[[C-Man:]]]], [CODE(HTTP)@en[[[C-Opt:]]]] およびこれらで宣言された[[ヘッダー接頭辞]]から始まる[[ヘッダー]]の名前は、
[CODE(HTTP)@en[[[Connection:]]]] に指定しなければ[['''なりません''']] [SRC[>>19]]。
* 処理モデル
[24] 必須の[[拡張宣言]]の[[受信者]]は、拡張で指定された規則に従わなければ[['''なりません''']] [SRC[>>19]]。
[29] 必須の[[拡張宣言]]を受信して拡張をすべて処理できた[[鯖]]は、
[[応答]]に [CODE(HTTP)@en[[[Ext:]]]] や [CODE(HTTP)@en[[[C-Ext:]]]]
を指定しなければなりません。
[25] 任意選択の[[拡張宣言]]の[[受信者]]は、拡張で指定された規則に従っても構いませんし、
拡張を無視しても構いません [SRC[>>19]]。
* 引数
[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]
* 関連
[22] 意味的には[[XML名前空間]]の[[名前空間宣言]]と似ています。