/
955.txt
156 lines (114 loc) · 7.43 KB
/
955.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
[1] [DFN[[RUBYB[[[状態行]]]@en[status line]]]]は、[[応答メッセージ]]の[[開始行]]です。
* 仕様書
[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-3.1.2>
- [8] [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#page-35>
- [15] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-14.22>
- [17] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-14.24>
- [19] [CITE@en[RFC 4918 - HTTP Extensions for Web Distributed Authoring and Versioning (WebDAV)]] ([TIME[2014-09-21 17:04:59 +09:00]] 版) <http://tools.ietf.org/html/rfc4918#section-14.28>
]REFS]
* 構文
[3] [[状態行]]は、[[HTTPの版]]、[[SP]]、[[状態符号]]、
[[理由句]]、[[CRLF]] を順に連ねたものです [SRC[>>2]]。
[FIG(railroad)[
= [[HTTPの版]]
= [CODE(HTTP)[[[SP]]]]
= [[状態符号]]
= [CODE(HTTP)[[[SP]]]]
= [[理由句]]
= [[CRLF]]
]FIG]
[4] [[状態符号]]は[[応答メッセージ]]の意味を決める3桁の[[整数]]です。
[5] [[理由句]]は数値の[[状態符号]]に対応するテキストの説明を提供するものです [SRC[>>2]]。
[7] [[HTTPの版]]は、[[送信者]]が対応する[[HTTPの版]]を示すものです。
;; [11] [[HTTP/0.9]] [[メッセージ]]には[[状態行]]がありません。
* 構文解析
[9] 構文上 [[SP]] の箇所は、[[空白]]1つ以上を区切りとみなして[[構文解析]]して構いません。
また、最初と [[CRLF]] 前の[[空白]]は無視して構いません。ここで[[空白]]は、
[[SP]]、[[HTAB]]、[[VT]]、[[FF]]、[[CR]] のことをいいます。 [SRC[>>8]]
[26] [[Chrome]] は、[[プロトコルの版]]と[[空白]]の後、0文字[[以上]]の[[数字]]列があれば、
それを[[状態符号]]とします。その後[[空白]]があれば無視し、残ったものを[[理由句]]とします。
(少なくても [[XHR]] の [CODE(DOMa)@en[[[status]]]] では) 2[SUP[31]] [[以上]]なら、
2[SUP[31]]-1 がかわりに返されます。[[数字]]列がない場合、 [CODE[200 OK]]
とみなされ、実際の残りの文字列は無視されます。 [TIME[2015-06-17T12:30:29.00Z]]
[10] [[改行]]については、[[メッセージ]]の項を参照してください。
[13] [[応答]]の最初の行が[[状態行]]として解釈できない場合、
[[HTTP/0.9]] [[応答]]とみなされることとなります。
;; [[HTTP/0.9]] も参照。
* [CODE(XMLe)@en[status]] 要素 (WebDAV)
[21] [CODE(URI)@en[[[DAV:]]]] [[名前空間]]の [DFN[[CODE(XMLe)@en[[[status]]]]]]
[[要素]]は、 [[HTTP]] [[状態行]]を表します [SRC[>>19]]。
[22] [[内容]]は、[[状態行]]を表す[[文字データ]]です [SRC[>>19]]。
[FIG(railroad)[
= [[状態行]]
]FIG]
[20] [[RFC 2616]] の[[状態行]]の定義を参照しており [SRC[>>19]]、末尾に
[CODE(ABNF)@en[[[CRLF]]]] が含まれることとなっていますが、 [[RFC 4918]] 中の例示はすべて[[改行]]なしとなっており、
実際には[[改行]]は含めないのが意図と思われます。
[23] [[プロトコルの版]]は [[RFC 4918]] の例示ではすべて [[HTTP/1.1]]
となっていますが、その決め方や解釈は明記されていません。
[18] [CODE(XMLe)@en[[[status]]]] [[要素]]は、 [CODE(XMLe)@en[[[response]]]]
[[要素]]で使うことができ [SRC[>>17]]、 [CODE(XMLe)@en[[[href]]]]
[[要素]]で示される[[資源]]に関する状態を表します。
[16] [CODE(XMLe)@en[[[status]]]] [[要素]]は、 [CODE(XMLe)@en[[[propstat]]]]
[[要素]]で使うことができ、 [CODE(XMLe)@en[[[prop]]]] [[要素]]に含まれる[[特性]]に関する状態を表します [SRC[>>15]]。
* 歴史
[FIG(quote)[
[FIGCAPTION[
[6] RFC 1945 (HTTP/1.0); RFC 2068・2616 (HTTP/1.1) 6.1 Status-Line
]FIGCAPTION]
> The first line of a [DEL[[INS[{1945}]] Full-]]Response
message is the Status-Line, consisting of the protocol version followed by a numeric status code and its
associated textual phrase, with each element separated by SP
characters. No CR or LF is allowed except in the final CRLF sequence.
[CODE(ABNF)[Full-Response]] メッセージの最初の行は [CODE(ABNF)[Status-Line]]
で、プロトコルの版とそれに続く数値[[状態符号]]とそれに関連付けられた文語句で構成され、
それぞれの要素は [CODE(char)[[[SP]]]] 文字で分離します。
最終 [[CRLF]] 列を除いて [CODE(char)[[[CR]]]]
や [CODE(char)[[[LF]]]] は認められていません。
>
- Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF
[DEL[
>[INS[{1045}]] Since a status line always begins with the protocol version and status code
状態行は常にプロトコルの版と状態符号
>
- "HTTP/" 1*DIGIT "." 1*DIGIT SP 3DIGIT SP
> (e.g., "HTTP/1.0 200 "), the presence of that expression is
sufficient to differentiate a Full-Response from a Simple-Response.
Although the Simple-Response format may allow such an expression to
occur at the beginning of an entity body, and thus cause a
misinterpretation of the message if it was given in response to a
Full-Request, most HTTP/0.9 servers are limited to responses of type
"text/html" and therefore would never generate such a response.
(例えば [SAMP(HTTP)[HTTP/1.0 200 ]]) で始まりますから、
この表現の存在は [CODE(ABNF)[Full-Response]] と
[CODE(ABNF)[Simple-Response]] を区別するのに十分です。
[CODE(ABNF)[Simple-Response]] 書式は実体本体にこのような表現を認めていますから、
[CODE(ABNF)[Full-Request]] 経の応答でそのようなものがあるとメッセージの誤解釈を起こしてしまうことになりますが、
ほとんどの HTTP/0.9 サーバーは型 [CODE(MIME)[[[text/html]]]]
の応答に制限されていますから、そのような応答は決して生成されないでしょう。
]DEL]
*** 6.1.1 Status Code and Reason Phrase
→[CODE(WikiPage)[[[状態符号]]]]
]FIG]
[FIG(quote)[
[FIGCAPTION[
[14] RFC 2518 (WebDAV) 12.9.1.2 status XML Element
]FIGCAPTION]
>
: Name: [CODE(DAVe)[status]]
: Namespace: [CODE(URI)[[[DAV:]]]]
: Purpose: Holds a single HTTP status-line
: Value: status-line ;status-line defined in [RFC2068]
:目的:単一の [[HTTP]] [CODE(ABNF)[status-line]]を保持します
:値:[CODE(ABNF)[[[status-line]] [CODE(comment)[; [CODE(ABNF)[status-line]] は [{RFC2068]] で定義]]]]
> [CODE(XML)[<!ELEMENT [CODE(DAVe)[status]] (#[CODE(XML)[[[PCDATA]]]]) >]]
]FIG]
[12] [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.3>
[24] [CITE@en[draft-singer-appsawg-mcast-url-00 - URLs and HTTP Response Forms for Multicast]]
( ([TIME[2014-10-17 05:06:18 +09:00]] 版))
<https://tools.ietf.org/html/draft-singer-appsawg-mcast-url-00#section-6>
* 関連
[25] [[HTTP/2]] では、[[疑似ヘッダー]]が[[状態行]]の役割を果たしています。