/
89.txt
153 lines (119 loc) · 7.72 KB
/
89.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
[1] [DFN[[CODE(ABNF)@en[[[protocol]]]]]] は、[[プロトコル]]の名前と[RUBY[版][バージョン]]を表す構文です。
* 仕様書
[REFS[
- [2] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-6.7>
- [9] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-2.6>
- [11] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-5.7.1>
- [20] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-06-07 01:59:35 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-8.6>
- [17] [CITE[Hypertext Transfer Protocol (HTTP) Upgrade Token Registry]] ([TIME[2014-06-11 03:43:45 +09:00]] 版) <http://www.iana.org/assignments/http-upgrade-tokens/http-upgrade-tokens.xhtml>
- [23] [CITE@en[RFC 3507 - Internet Content Adaptation Protocol (ICAP)]] ([TIME[2014-06-08 07:17:07 +09:00]] 版) <http://tools.ietf.org/html/rfc3507#section-4.3.2>
- [30] [CITE@en[RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)]] ([TIME[2015-05-15 10:14:54 +09:00]] 版) <https://tools.ietf.org/html/rfc7540#section-3.2>
]REFS]
* 文脈
[3] [CODE(ABNF)@en[[[protocol]]]] やそれに類する構文は、
次の場面で利用されます。
[FIG(list)[
- [[プロトコルの版]] ([[開始行]])
- [CODE(HTTP)@en[[[Upgrade:]]]] [[ヘッダー]] [SRC[>>2]]
- [CODE(HTTP)@en[[[Via:]]]] [[ヘッダー]]の[[プロトコル]] [SRC[>>2]]
- [CODE(CGI)@en[[[SERVER_PROTOCOL]]]] [[メタ変数]]
]FIG]
[4] [CODE(ABNF)@en[[[product]]]] ([CODE(HTTP)@en[[[User-Agent:]]]], [CODE(HTTP)@en[[[Server:]]]],
[CODE(HTTP)@en[[[Via:]]]] の[[注釈]]) も類似した構文を採用していますが、
[[プロトコル]]ではなく[[製品]]を表すものとなっています。
* 構文
[5] [CODE(ABNF)@en[[[protocol]]]] は、[[プロトコル名]]のみか、または[[プロトコル名]]と[[プロトコル版]]を[CODE(char)[[[/]]]] で区切ったものです
[SRC[>>2]]。
[6] [[プロトコル名]]と[[プロトコル版]]は、いずれも[[字句]]です [SRC[>>2]]。
[FIG(railroad)[
= [[字句]]
= ?
== [CODE(char)[[[/]]]]
== [[字句]]
]FIG]
[7] 大文字と小文字の区別の有無は明記されておらず、区別するものとみられます。
[[HTTPの版]]では区別すると明記されています [SRC[>>9]]。
;; [8] 歴史的には、区別しないという解釈もありました。[[HTTPの版]]や
[CODE(ABNF)@en[[[SERVER_PROTOCOL]]]] の項を参照してください。
また [[Web Sockets]] は、区別しない [CODE(HTTP)@en[[[Upgrade:]]]]
の処理を定義しています。
[13] [CODE(CGI)@en[[[SERVER_PROTOCOL]]]] では、値に更に制限があります。
[12] [[HTTPの版]]では、[[プロトコル版]]の値に更に制限があります。
[10] [CODE(HTTP)@en[[[Via:]]]] では、[[プロトコル名]]が [CODE[[[HTTP]]]]
の場合、[[プロトコル名]]と [CODE(char)[[[/]]]] を省略できることになっています。
[[プロトコル版]]は省略できません。
[FIG(railroad)[
=?
== [[字句]]
== [CODE(char)[[[/]]]]
= [[字句]]
]FIG]
* プロトコルの一覧
[14] [[プロトコル]]としては、次の値が利用されています。
[FIG(list)[
,*[[プロトコル]],*[CODE(HTTP)@en[[[Upgrade:]]]],*[CODE(HTTP)@en[[[Via:]]]],*[[HTTPの版]],*[CODE(CGI)@en[[[SERVER_PROTOCOL]]]]
,[CODE(HTTP)@en[fix]],○
,[CODE(HTTP)@en[[[GridHTTP/1.0]]]],○,,,
,[CODE(HTTP)@en[[[h2]]]],○,,,
,[CODE(HTTP)@en[[[h2c]]]],○,,,
,[CODE(HTTP)@en[[[HTTP/0.9]]]],×,×,△,○
,[CODE(HTTP)@en[[[HTTP/1.0]]]],×,○,○,○
,[CODE(HTTP)@en[[[HTTP/1.1]]]],? ,○,○,○
,[CODE(HTTP)@en[[[HTTP/2.0]]]], , ,○,○
,[CODE(HTTP)@en[HTTP/2]] , , , ,○
,[CODE(HTTP)@en[[[ICAP/1.0]]]], ,○,○,
,[CODE(HTTP)@en[ICE]],,,○
,[CODE(HTTP)@en[ICY]],,,○
,[CODE(HTTP)@en[[[INCLUDED]]]], , , ,○
,[CODE(HTTP)@en[[[MRCP/2.0]]]], , ,○,
,[CODE(HTTP)@en[[[PTTH/0.9]]]],○, , ,
,[CODE(HTTP)@en[[[PTTH/1.0]]]],○, , ,
,[CODE(HTTP)@en[[[Q4S/1.0]]]] , , ,○,
,[CODE(HTTP)@en[[[RTSP/1.0]]]], , ,○,
,[CODE(HTTP)@en[[[Secure-HTTP/1.4]]]],,,○,
,[CODE(HTTP)@en[[[SIP/2.0]]]] , ,○,○,○
,[CODE(HTTP)@en[tcp][Upgrade: tcp]],○
,[CODE(HTTP)@en[[[TLS/1.0]]]] ,○, , ,
,[CODE(HTTP)@en[[[TLS/1.1]]]] ,○, , ,
,[CODE(HTTP)@en[[[TLS/1.2]]]] ,○, , ,
,[CODE(HTTP)@en[[[WebSocket]]]],○, , ,
,[CODE(HTTP)@en[WebSocket/13]], , , ,○
]FIG]
[15] この他に、 [[HTTP]] の [[RFC]] には例示として
[CODE(HTTP)@en[[[HTTP/2.0]]]], [CODE(HTTP)[[[IRC]]/6.9]],
[CODE(HTTP)@en[[[SHTTP]]/1.3]], [CODE(HTTP)[[[RTA]]/[[x11]]]]
という架空の [CODE(HTTP)@en[[[Upgrade:]]]] [[ヘッダー]]の値が登場します。
[24] この一覧は >>25 に [[JSON]] 形式で収録されています。
[REFS[
- [25] [CITE@en[data-web-defs/headers.txt at master · manakai/data-web-defs]] ([TIME[2014-09-02 04:52:50 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/doc/headers.txt>
]REFS]
* IANA 登録簿
[16] [CODE(HTTP)@en[[[Upgrade:]]]] の値については、 [[IANA登録簿]] [SRC[>>17]] が用意されています
[SRC[>>20]]。
[18] [[IANA登録簿]]は [[RFC 2817]] により設けられました [SRC[>>26, >>27]]。
[REFS[
- [26] [CITE@en[RFC 2817 - Upgrading to TLS Within HTTP/1.1]] ([TIME[2015-02-22 14:29:05 +09:00]] 版) <http://tools.ietf.org/html/rfc2817#section-7.2>
- [27] [CITE[RFC Errata Report]] ([TIME[2015-03-04 19:05:39 +09:00]] 版) <http://www.rfc-editor.org/errata_search.php?rfc=2817>
]REFS]
[19] 2003年12月の時点で、登録簿には一つも登録されていません。
HTTP 仕様書で定義されている [CODE(HTTP)[HTTP/[VAR[*]]]] や
登録手続きを規定している RFC 2817 が定義している [CODE(HTTP)[TLS/1.0]]
すら載っていないのはなんとも間抜けな話です [WEAK[(が、 IANAREG では良くある話です)]]。
[22] その後いつからか、 [CODE[[[TLS/1.0]]]] も登録されました。
また、 [CODE[[[WebSocket]]]] も登録されています。
[21] [[RFC 7230]] は新しい登録手続きを定義しています。
手続きは [[First Come First Served]] となっています [SRC[>>20]]。
更に [CODE[[[HTTP]]]] も登録しています [SRC[>>20]]。
[28] 気づいたら [CODE[[[TLS/1.0]]]] は [CODE[[[TLS]]]] に変わっています。
[[RFC 2817]] は [CODE[[[TLS/1.0]]]] を規定していましたが、 [[RFC正誤表]]が
[CODE[[[TLS]]]] を規定し、 [[TLS]] の版を指定できる形に改めています [SRC[>>27]]。
[29] 現在の [[IANA登録簿]]は、 [[RFC 2818]] (のみ) を出典に、
版は「ANY DIGIT.DIGIT (e.g.. "1.2")」と説明しています [SRC[>>17]]。 [TIME[2015-03-04T10:11:34.700Z]]
;; しかも「[[IANA登録簿]]は既に修正されている」[SRC[>>27]] ともされています。
そんな勝手な変更をしないで素直に [[RFC]] を改訂してくれればいいのですが...
[31] [[HTTP/2]] において [CODE(HTTP)@en[[[Upgrade:]] [[h2][HTTP/2]]]] は無視しなければ[['''ならない''']]
[SRC[>>30]] と規定されていますが、なぜかこの [CODE[[[h2]]]] という値は登録されていません。
予約状態で登録されていても良さそうなものですが。 [TIME[2015-05-18T12:24:50.700Z]]
[32] [CITE@en[869725 – support shoutcast streams]]
([TIME[2017-01-22 13:24:42 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=869725>