/
704.txt
111 lines (85 loc) · 6.83 KB
/
704.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
[20] [DFN[[[HTTP/1.1]]]] は、3つ目の[[HTTPの版]]です。多くの[[サーバー]]と[[クライアント]]により広く実装されています。
* 仕様書
[REFS[
- [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>
- [10] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231>
- [11] [CITE@en[RFC 7232 - Hypertext Transfer Protocol (HTTP/1.1): Conditional Requests]] ([TIME[2014-06-07 01:59:31 +09:00]] 版) <https://tools.ietf.org/html/rfc7232>
- [12] [CITE@en[RFC 7233 - Hypertext Transfer Protocol (HTTP/1.1): Range Requests]] ([TIME[2014-06-07 01:59:31 +09:00]] 版) <https://tools.ietf.org/html/rfc7233>
- [13] [CITE@en[RFC 7234 - Hypertext Transfer Protocol (HTTP/1.1): Caching]] ([TIME[2014-06-07 01:58:49 +09:00]] 版) <https://tools.ietf.org/html/rfc7234>
- [14] [CITE@en[RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication]] ([TIME[2014-06-07 01:59:34 +09:00]] 版) <https://tools.ietf.org/html/rfc7235>
- [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=23>
]REFS]
* HTTP/1.0 との差異
[23] [[HTTP/1.0]] と [[HTTP/1.1]] には次のような差異があります。
[FIG(list)[
- [24] [[プロトコルの版]]が異なります
- [25] [CODE(HTTP)[[[1xx]]]] とそれに関連する機能は [[HTTP/1.1]] でのみ利用可能です
- [26] [[HTTP/1.1]] では [CODE(HTTP)@en[[[Transfer-Encoding:]] [[chunked]]]] の実装が義務付けられています
- [27] [[鯖]]は [CODE(HTTP)@en[[[Host:]]]] [[ヘッダー]]のない [[HTTP/1.1]] [[要求]]に
[CODE(HTTP)[[[400]]]] [[応答]]を返さなければなりません
- [33] [[HTTP/1.1]] では[[持続的接続]]が標準の動作となっています。
[[HTTP/1.0]] では接続を直ちに閉じるのが標準の動作となっています。
- [34] [[齢]]の計算方法が [[HTTP/1.0]] [[串]]の存在如何により異なります。
- [35] [CODE(HTTP)@en[[[Meter:]]]] [[ヘッダー]]は [[HTTP/1.0]] [[以下]]では使えません。
]FIG]
[36] [[HTTP/1.1]] を実装せずに [[HTTP/1.0]] を実装するとしたら、その理由は
[CODE(HTTP)@en[[[chunked]]]] を実装したくないか、
[CODE(HTTP)[[[1xx]]]] を実装したくないか、
またはその両方が理由でしょう。[[持続的接続]]を含めその他の [[HTTP/1.1]]
のみの機能は、[[クライアント]]も[[鯖]]も必要がなければ使わなくて済みます。
* プロトコルの版 [CODE(HTTP)@en[HTTP/1.1]]
[37] [[開始行]]などで用いられる[[プロトコルの版]] [DFN[[CODE(HTTP)@en[[[HTTP/1.1]]]]]]
は、 [[HTTP/1.1]] を表します。
[38] [[SSDP]] でも [CODE(HTTP)@en[[[HTTP/1.1]]]] を使いますが、後方互換性のためで、
[[HTTP/1.1]] ではないとされています [SRC[>>39]]。
* 歴史
[22] [[HTTP/1.1]] は、 [[RFC 1945]] によって規定される [[HTTP/0.9]] や [[HTTP/1.0]]
と並行する第3の [[HTTP]] の版として [[IETF]] によって定義されました。
;; [[HTTP/1.1]] は [[HTTP/1.0]] の改訂版ではありますが、実際上も手続き上も
[[HTTP/0.9]] および [[HTTP/1.1]] を置き換えるものとはなっていません。
[[HTTP/1.1]] の開発開始から20年経った後も [[HTTP/0.9]] は実装されています。
** 第1次仕様 (RFC 2068, RFC 2069)
[REFS[
- [7] [[RFC 2068]]
- [8] [[RFC 2069]]
]REFS]
[28] 後に補足的な内容を含む [[RFC 2145]] が発行されています。
** 第2次仕様 (RFC 2616, RFC 2617)
[REFS[
- [5] [[RFC 2616]]
- [6] [[RFC 2617]]
- [3] ''HTTP/1.1 Specification Errata'' <http://world.std.com/~lawrence/http_errata.html>
]REFS]
** 第3次仕様 (RFC 7230-7237)
[REFS[
- [1]
[CITE[Revising RFC2616 - what's happening from Mark Nottingham on 2006-10-18 (ietf-http-wg@w3.org from October to December 2006)]] <http://lists.w3.org/Archives/Public/ietf-http-wg/2006OctDec/0046.html>
([[名無しさん]] [WEAK[2006-10-21 12:19:38 +00:00]])
- [2]
[CITE[RFC2616bis Issues]] <http://www.w3.org/Protocols/HTTP/1.1/rfc2616bis/issues/>
([[名無しさん]] [WEAK[2006-11-12 10:25:01 +00:00]])
]REFS]
[4] 2014年6月に [[RFC 7230]]-[[RFC 7237]] が発行されました。関連仕様として
[[RFC 7238]], [[RFC 7239]], [[RFC 7240]] も発行されています。
[21] これらの [[RFC]] は [[RFC 2616]] と [[RFC 2145]] を[[廃止]]して置き換える他、
[[RFC 2617]] と [[RFC 2817]] と [[RFC 2818]] の一部を[[更新]]するものとされています。
[REFS[
- [15] [CITE@en[RFC 7236 - Initial Hypertext Transfer Protocol (HTTP) Authentication Scheme Registrations]] ([TIME[2014-06-07 01:57:05 +09:00]] 版) <https://tools.ietf.org/html/rfc7236>
- [16] [CITE@en[RFC 7237 - Initial Hypertext Transfer Protocol (HTTP) Method Registrations]] ([TIME[2014-06-07 01:59:34 +09:00]] 版) <https://tools.ietf.org/html/rfc7237>
- [17] [CITE@en[RFC 7238 - The Hypertext Transfer Protocol Status Code 308 (Permanent Redirect)]] ([TIME[2014-06-07 01:57:48 +09:00]] 版) <https://tools.ietf.org/html/rfc7238>
- [18] [CITE@en[RFC 7239 - Forwarded HTTP Extension]] ([TIME[2014-06-07 01:59:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7239>
- [19] [CITE@en[RFC 7240 - Prefer Header for HTTP]] ([TIME[2014-06-07 01:59:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7240>
]REFS]
[30] 従来の [[RFC]] を全面改訂して再編しており、以前の版よりは大幅に記述が改善され、
比較的詳細になっています。
[31] とはいえ所詮は [[IETF]] 品質で、同時代の他の [[Web標準]] ([[WHATWG]] の
[[HTML Standard]] や [[TC39]] の [[ECMAScript]] など) と比較すると遥かに簡易的で曖昧です。
[32] 本体仕様だけでも6分割もされているため、[[RFC]] の境界部分で若干の曖昧性や規定の重複が起こっています。
また古くからの要件を非網羅的に適宜列挙する形の仕様書となっていますから、
境界条件が曖昧だったり、複数の規定の条件が重複してかつ若干異なっていたり、
起こり得るケースの一部のみしか規定されていなかったりします。
[[誤り処理]]に関する規定も前の版に比べるとかなり増えていますが、それでもほとんどの部分では
(意図的に) 規定されていません。
[29] [[RFC 723x]] は [['''SHOULD''']] を避けるためか、 [[ought to]]
という表現をかなり頻繁に用いています。しかしその意図するところは説明されておらず、
どの程度の温度感で勧めているのかはよくわからなくなっています。