-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathRFC2616-ja.html
7851 lines (6305 loc) · 543 KB
/
RFC2616-ja.html
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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8" />
<title>ハイパーテキスト転送プロトコル -- HTTP/1.1</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!--
href="#Sec([\d\.]+)" → href="#section-$1"
id="Sec([\d\.]+)" → id="section-$1"
href="#Ref(\d+)" → href="#ref-$1"
id="Ref(\d+)" → id="ref-$1"
-->
<meta charset="utf-8" />
<!--
<link rel="Stylesheet" href="rfc_ja.css" type="text/css" />
<link rel="Contents" href="http://www.studyinghttp.net/rfc_ja/" />
-->
<style type="text/css">
/**
* rfc_ja.css/20100325
* for RFC-Translations
*/
h1 {
clear:both;
text-align:center;
}
h2 {
margin:0.5em 0.1em;
text-align:left;
}
address {
font-size:0.9em;
font-style:normal;
text-align:right;
}
address a {
font-family:"Georgia", "Times New Roman", "Times", serif;
font-size:1.1em;
font-weight:bold;
}
p {
line-height:1.3em;
margin:0.5em 0.5em 0.5em 3em;
text-indent:1em;
}
pre {
line-height:1.3em;
margin:1em 1em 1em 5em;
}
dfn {
font-size:1.1em;
font-style:normal;
font-weight:bold;
}
code {
font:normal normal 1.1em monospace;
}
samp {
font-family:monospace;
margin:0 0.1em;
}
cite:before, cite:after {
content:'"';
}
em {
font-style:normal;
font-weight:bold;
}
blockquote {
margin-left:5em;
margin-right:4em;
}
a:hover, a:focus {
background-color:#bafecd;
}
hr {
clear:both;
}
ol {
list-style-type:decimal;
line-height:1.5em;
margin:0.5em 1em 0.5em 4em;
}
ol.ABC {
list-style-type:upper-alpha;
}
ol.abc {
list-style-type:lower-alpha;
}
ul {
list-style:disc;
line-height:1.5em;
margin:0.5em 1em 0.5em 4em;
}
ol p, ul p {
margin-left:0.5em;
}
li ol, li ul {
margin:0 0 0 1%;
}
dl { /* Definition List */
line-height:1.5em;
margin:1.2em 1em 0 4em;
}
dt {
font-weight:bold;
}
dd {
margin:0.2em 1em 0.7em;
}
table {
margin:1em 1em 1em 5em;
}
td dl, td pre {
margin:0.5em 0em;
}
/* --- Original Class --- */
.note {
font-size:0.9em;
margin-left:4em;
}
.references dt:before {
content:"[";
}
.references dt:after {
content:"]";
}
#NUMBER {
border:none;
float:left;
margin:0.5em;
white-space:pre;
}
#AUTHOR {
border:none;
float:right;
margin:0.5em;
white-space:pre;
}
#CONTENTS dt {
margin:0.5em 0 0;
}
#CONTENTS dd {
margin:0 0 0 2em;
}
#CONTENTS dd dl, #CONTENTS dd dt {
margin:0;
font-weight: normal;
}
#NOTICE {
border:0.2em #999 solid;
margin:1em 5%;
padding:0.5em;
}
</style>
<style>
aside {
font-size: small;
border: double #BB3333 6px;
padding: 0.5em 1em;
margin-bottom: 1em;
}
aside > p,
aside > ul {
margin: 1em;
}
</style>
</head>
<body>
<aside class="trans-meta">
<h1>RFC2616 日本語訳の複製</h1>
<p>
<a href="https://triple-underscore.github.io/rfc-others/RFC2616-ja.html">このページ</a>
は、 IETF による
<cite><a href="https://www.rfc-editor.org/rfc/rfc2616">Hypertext Transfer Protocol -- HTTP/1.1</a></cite>
( RFC 2616 )の,橋本英彦 氏による
<a href="http://www.studyinghttp.net/rfc_ja/rfc2616">日本語訳</a>
†を、内容に手を加えずに,転載したものです††。
</p>
<ul>
<li>†
2014 年 3 月 頃のもの。
現在はリンク切れ — リンク先サイト( http://www.studyinghttp.net/ )は 2014 年 5 月 頃 〜 2014 年 7 月 13 日 現在まで,アクセスできなくなっています。
</li>
<li>††
転載 公開日: <time>2014-07-14</time> — 明示的に許諾は得てはいません。
下記ヘッダのリンク先に(上述と同じ頃に)記載されていた 取り扱い規約に従い,改変を加えずに配布するものです。
ただし、一部マークアップを変更しています( DOCTYPE など)。
また、要素 id の命名方式を RFC 原文と同じものに戻しています。
</li>
</ul>
<p>
<strong>注意:
この RFC 2616 (および 関連の一部 RFC )は、
現在では古くなっています
</strong>。
それを置換する HTTP1.1 の改訂が、
<a href="https://httpwg.org/specs/rfc7230.html">RFC 7230</a>,
<a href="https://httpwg.org/specs/rfc7231.html">RFC 7231</a>,
<a href="https://httpwg.org/specs/rfc7232.html">RFC 7232</a>,
<a href="https://httpwg.org/specs/rfc7233.html">RFC 7233</a>,
<a href="https://httpwg.org/specs/rfc7234.html">RFC 7234</a>,
<a href="https://httpwg.org/specs/rfc7235.html">RFC 7235</a>
に分割されて公表されています
(<a href="https://triple-underscore.github.io/RFC723X-ja.html">日本語訳</a>)。
これらも、現在は,
<a href="https://httpwg.org/specs/rfc9110.html">RFC 9110</a>,
<a href="https://httpwg.org/specs/rfc9111.html">RFC 9111</a>,
<a href="https://httpwg.org/specs/rfc9112.html">RFC 9112</a>
に置換されてます
(<a href="https://triple-underscore.github.io/http-common-ja.html">日本語訳</a>)。
</p>
</aside>
<div id="TOP">
<a href="http://www.studyinghttp.net/">Studying HTTP</a> >
<a href="http://www.studyinghttp.net/rfc_ja/">RFC-Translations related HTTP</a>
<p id="NOTICE">
この文書は、
<cite>R. Fielding, J. Gettys, J. Mogul, H. Frystyk, L. Masinter, P. Leach, T. Berners-Lee: <a href="http://tools.ietf.org/html/rfc2616">Hypertext Transfer Protocol -- HTTP/1.1</a> (RFC 2616), June 1999.</cite>
を 橋本英彦 が日本語訳した物です。
この文書の取り扱いについては、<a href="http://www.studyinghttp.net/rfc_ja/#Notice">[Studying HTTP] の RFC 日本語訳を利用するにあたって</a>に従って下さい。
</p>
</div>
<hr />
<pre id="NUMBER">Network Working Group
Request for Comments: 2616
Obsoletes: 2068
Category: Standards Track
</pre>
<pre id="AUTHOR"> R. Fielding
UC Irvine
J. Gettys
Compaq/W3C
J. Mogul
Compaq
H. Frystyk
W3C/MIT
L. Masinter
Xerox
P. Leach
Microsoft
T. Berners-Lee
W3C/MIT
June 1999
</pre>
<h1>ハイパーテキスト転送プロトコル -- HTTP/1.1</h1>
<h2>この文書の位置付け</h2>
<p>
この文書は、インターネットコミュニティにおけるインターネット標準化過程プロトコルを規定し、改良のために議論と提案を求めるものである。
このプロトコルの標準化状態と状況については、"Internet Official Protocol Standards" (STD 1) の最新版を参照していただきたい。
この文書の配布に制限は無い。
</p>
<h2>著作権表示</h2>
<p>
Copyright © The Internet Society (1999). All Rights Reserved.
</p>
<h2>概要</h2>
<p>
ハイパーテキスト転送プロトコル (HTTP) は、分散・共同体ハイパーメディア情報システムのアプリケーションレベルプロトコルである。
このプロトコルは、リクエストメソッド、エラーコード、ヘッダ等の拡張を経て、ネームサーバや分散オブジェクト管理システム等、ハイパーテキストのために使う以上に多くの作業のために用いる事ができる、一般的でステートレスなプロトコルである <a href="#ref-47">[47]</a>。
HTTP の特徴として、データ表現のタイプ付け、及びネゴシエーションがあり、これによって転送されるデータの独立性が確立されるようなシステムが構築できる。
</p>
<p>
HTTP は、World-Wide Web グローバル情報利用の先進として、1990 年から使われている。
この仕様書は、"HTTP/1.1" と呼ばれるプロトコルを定義し、RFC 2068 <a href="#ref-33">[33]</a> を更新するものである。
</p>
<h2>目次</h2>
<dl id="CONTENTS">
<dt>1 <a href="#section-1">導入</a></dt>
<dd>1.1 <a href="#section-1.1">目的</a></dd>
<dd>1.2 <a href="#section-1.2">必要条件</a></dd>
<dd>1.3 <a href="#section-1.3">専門用語</a></dd>
<dd>1.4 <a href="#section-1.4">全体の動作</a></dd>
<dt>2 <a href="#section-2">表記の慣習と一般文法</a></dt>
<dd>2.1 <a href="#section-2.1">拡張 BNF</a></dd>
<dd>2.2 <a href="#section-2.2">基本的な規定</a></dd>
<dt>3 <a href="#section-3">プロトコルパラメータ</a></dt>
<dd>3.1 <a href="#section-3.1">HTTP のバージョン</a></dd>
<dd><dl>
<dt>3.2 <a href="#section-3.2">Uniform Resource Identifiers</a></dt>
<dd>3.2.1 <a href="#section-3.2.1">一般構文</a></dd>
<dd>3.2.2 <a href="#section-3.2.2">http URL</a></dd>
<dd>3.2.3 <a href="#section-3.2.3">URI の比較</a></dd>
</dl></dd>
<dd><dl>
<dt>3.3 <a href="#section-3.3">日付/時刻フォーマット</a></dt>
<dd>3.3.1 <a href="#section-3.3.1">完全な日付</a></dd>
<dd>3.3.2 <a href="#section-3.3.2">秒差</a></dd>
</dl></dd>
<dd><dl>
<dt>3.4 <a href="#section-3.4">文字セット</a></dt>
<dd>3.4.1 <a href="#section-3.4.1">Charset の誤り</a></dd>
</dl></dd>
<dd>3.5 <a href="#section-3.5">内容コーディング</a></dd>
<dd><dl>
<dt>3.6 <a href="#section-3.6">転送コーディング</a></dt>
<dd>3.6.1 <a href="#section-3.6.1">チャンク形式転送コーディング</a></dd>
</dl></dd>
<dd><dl>
<dt>3.7 <a href="#section-3.7">メディアタイプ</a></dt>
<dd>3.7.1 <a href="#section-3.7.1">公式化とテキストの既定</a></dd>
<dd>3.7.2 <a href="#section-3.7.2">マルチパートタイプ</a></dd>
</dl></dd>
<dd>3.8 <a href="#section-3.8">製品トークン</a></dd>
<dd>3.9 <a href="#section-3.9">品質値</a></dd>
<dd>3.10 <a href="#section-3.10">言語タグ</a></dd>
<dd>3.11 <a href="#section-3.11">エンティティタグ</a></dd>
<dd>3.12 <a href="#section-3.12">レンジ単位</a></dd>
<dt>4 <a href="#section-4">HTTP のメッセージ</a></dt>
<dd>4.1 <a href="#section-4.1">メッセージタイプ</a></dd>
<dd>4.2 <a href="#section-4.2">メッセージヘッダ</a></dd>
<dd>4.3 <a href="#section-4.3">メッセージボディ</a></dd>
<dd>4.4 <a href="#section-4.4">メッセージの長さ</a></dd>
<dd>4.5 <a href="#section-4.5">一般ヘッダフィールド</a></dd>
<dt>5 <a href="#section-5">リクエスト</a></dt>
<dd><dl>
<dt>5.1 <a href="#section-5.1">リクエストライン</a></dt>
<dd>5.1.1 <a href="#section-5.1.1">メソッド</a></dd>
<dd>5.1.2 <a href="#section-5.1.2"> Request-URI</a></dd>
</dl></dd>
<dd>5.2 <a href="#section-5.2">リクエストによるリソースの識別</a></dd>
<dd>5.3 <a href="#section-5.3">リクエストヘッダフィールド</a></dd>
<dt>6 <a href="#section-6">レスポンス</a></dt>
<dd><dl>
<dt>6.1 <a href="#section-6.1">ステータスライン</a></dt>
<dd>6.1.1 <a href="#section-6.1.1">ステータスコードと説明句</a></dd>
</dl></dd>
<dd>6.2 <a href="#section-6.2">レスポンスヘッダフィールド</a></dd>
<dt>7 <a href="#section-7">エンティティ</a></dt>
<dd>7.1 <a href="#section-7.1">エンティティヘッダフィールド</a></dd>
<dd><dl>
<dt>7.2 <a href="#section-7.2">エンティティボディ</a></dt>
<dd>7.2.1 <a href="#section-7.2.1">タイプ</a></dd>
<dd>7.2.2 <a href="#section-7.2.2">エンティティの長さ</a></dd>
</dl></dd>
<dt>8 <a href="#section-8">接続</a></dt>
<dd><dl>
<dt>8.1 <a href="#section-8.1">持続的接続</a></dt>
<dd>8.1.1 <a href="#section-8.1.1">目的</a></dd>
<dd>8.1.2 <a href="#section-8.1.2">全体の動作</a></dd>
<dd>8.1.3 <a href="#section-8.1.3">プロクシサーバ</a></dd>
<dd>8.1.4 <a href="#section-8.1.4">現実的な考察</a></dd>
</dl></dd>
<dd><dl>
<dt>8.2 <a href="#section-8.2">メッセージ転送の必要条件</a></dt>
<dd>8.2.1 <a href="#section-8.2.1">持続的接続とフローコントロール</a></dd>
<dd>8.2.2 <a href="#section-8.2.2">エラーステータスメッセージのための接続のモニタリング</a></dd>
<dd>8.2.3 <a href="#section-8.2.3">100 (Continue) ステータスの使用</a></dd>
<dd>8.2.4 <a href="#section-8.2.4">サーバが早まって接続を閉じた場合のクライアントの振る舞い</a></dd>
</dl></dd>
<dt>9 <a href="#section-9">メソッドの定義</a></dt>
<dd><dl>
<dt>9.1 <a href="#section-9.1">安全{safe} なメソッドと冪等{idempotent} なメソッド</a></dt>
<dd>9.1.1 <a href="#section-9.1.1">安全{safe} なメソッド</a></dd>
<dd>9.1.2 <a href="#section-9.1.2">冪等{idempotent} なメソッド</a></dd>
</dl></dd>
<dd>9.2 <a href="#section-9.2">OPTIONS</a></dd>
<dd>9.3 <a href="#section-9.3">GET</a></dd>
<dd>9.4 <a href="#section-9.4">HEAD</a></dd>
<dd>9.5 <a href="#section-9.5">POST</a></dd>
<dd>9.6 <a href="#section-9.6">PUT</a></dd>
<dd>9.7 <a href="#section-9.7">DELETE</a></dd>
<dd>9.8 <a href="#section-9.8">TRACE</a></dd>
<dd>9.9 <a href="#section-9.9">CONNECT</a></dd>
<dt>10 <a href="#section-10">ステータスコードの定義</a></dt>
<dd><dl>
<dt>10.1 <a href="#section-10.1">Informational 1xx</a></dt>
<dd>10.1.1<a href="#section-10.1.1">100 Continue</a></dd>
<dd>10.1.2 <a href="#section-10.1.2">101 Switching Protocols</a></dd>
</dl></dd>
<dd><dl>
<dt>10.2 <a href="#section-10.2">Successful 2xx</a></dt>
<dd>10.2.1 <a href="#section-10.2.1">200 OK</a></dd>
<dd>10.2.2 <a href="#section-10.2.2">201 Created</a></dd>
<dd>10.2.3 <a href="#section-10.2.3">202 Accepted</a></dd>
<dd>10.2.4 <a href="#section-10.2.4">203 Non-Authoritative Information</a></dd>
<dd>10.2.5 <a href="#section-10.2.5">204 No Content</a></dd>
<dd>10.2.6 <a href="#section-10.2.6">205 Reset Content</a></dd>
<dd>10.2.7 <a href="#section-10.2.7">206 Partial Content</a></dd>
</dl></dd>
<dd><dl>
<dt>10.3 <a href="#section-10.3">Redirection 3xx</a></dt>
<dd>10.3.1 <a href="#section-10.3.1">300 Multiple Choices</a></dd>
<dd>10.3.2 <a href="#section-10.3.2">301 Moved Permanently</a></dd>
<dd>10.3.3 <a href="#section-10.3.3">302 Found</a></dd>
<dd>10.3.4 <a href="#section-10.3.4">303 See Other</a></dd>
<dd>10.3.5 <a href="#section-10.3.5">304 Not Modified</a></dd>
<dd>10.3.6 <a href="#section-10.3.6">305 Use Proxy</a></dd>
<dd>10.3.7 <a href="#section-10.3.7">306 (Unused)</a></dd>
<dd>10.3.8 <a href="#section-10.3.8">307 Temporary Redirect</a></dd>
</dl></dd>
<dd><dl>
<dt>10.4 <a href="#section-10.4">Client Error 4xx</a></dt>
<dd>10.4.1 <a href="#section-10.4.1">400 Bad Request</a></dd>
<dd>10.4.2 <a href="#section-10.4.2">401 Unauthorized</a></dd>
<dd>10.4.3 <a href="#section-10.4.3">402 Payment Required</a></dd>
<dd>10.4.4 <a href="#section-10.4.4">403 Forbidden</a></dd>
<dd>10.4.5 <a href="#section-10.4.5">404 Not Found</a></dd>
<dd>10.4.6 <a href="#section-10.4.6">405 Method Not Allowed</a></dd>
<dd>10.4.7 <a href="#section-10.4.7">406 Not Acceptable</a></dd>
<dd>10.4.8 <a href="#section-10.4.8">407 Proxy Authentication Required</a></dd>
<dd>10.4.9 <a href="#section-10.4.9">408 Request Timeout</a></dd>
<dd>10.4.10 <a href="#section-10.4.10">409 Conflict</a></dd>
<dd>10.4.11 <a href="#section-10.4.11">410 Gone</a></dd>
<dd>10.4.12 <a href="#section-10.4.12">411 Length Required</a></dd>
<dd>10.4.13 <a href="#section-10.4.13">412 Precondition Failed</a></dd>
<dd>10.4.14 <a href="#section-10.4.14">413 Request Entity Too Large</a></dd>
<dd>10.4.15 <a href="#section-10.4.15">414 Request-URI Too Long</a></dd>
<dd>10.4.16 <a href="#section-10.4.16">415 Unsupported Media Type</a></dd>
<dd>10.4.17 <a href="#section-10.4.17">416 Requested Range Not Satisfiable</a></dd>
<dd>10.4.18 <a href="#section-10.4.18">417 Expectation Failed</a></dd>
</dl></dd>
<dd><dl>
<dt>10.5 <a href="#section-10.5">Server Error 5xx</a></dt>
<dd>10.5.1 <a href="#section-10.5.1">500 Internal Server Error</a></dd>
<dd>10.5.2 <a href="#section-10.5.2">501 Not Implemented</a></dd>
<dd>10.5.3 <a href="#section-10.5.3">502 Bad Gateway</a></dd>
<dd>10.5.4 <a href="#section-10.5.4">503 Service Unavailable</a></dd>
<dd>10.5.5 <a href="#section-10.5.5">504 Gateway Timeout</a></dd>
<dd>10.5.6 <a href="#section-10.5.6">505 HTTP Version Not Supported</a></dd>
</dl></dd>
<dt>11 <a href="#section-11">アクセス認証</a></dt>
<dt>12 <a href="#section-12">内容ネゴシエーション</a></dt>
<dd>12.1 <a href="#section-12.1">サーバ駆動型ネゴシエーション</a></dd>
<dd>12.2 <a href="#section-12.2">エージェント駆動型ネゴシエーション</a></dd>
<dd>12.3 <a href="#section-12.3">透過的ネゴシエーション</a></dd>
<dt>13 <a href="#section-13">HTTP におけるキャッシング</a></dt>
<dd><dl>
<dd>13.1.1 <a href="#section-13.1.1">キャッシュの正当性</a></dd>
<dd>13.1.2 <a href="#section-13.1.2">警告</a></dd>
<dd>13.1.3 <a href="#section-13.1.3">キャッシュコントロールメカニズム</a></dd>
<dd>13.1.4 <a href="#section-13.1.4">明示的なユーザエージェントの警告</a></dd>
<dd>13.1.5 <a href="#section-13.1.5">規則と警告の例外</a></dd>
<dd>13.1.6 <a href="#section-13.1.6">クライアントにコントロールされた振る舞い</a></dd>
</dl></dd>
<dd><dl>
<dt>13.2 <a href="#section-13.2">期限{Expiration} モデル</a></dt>
<dd>13.2.1 <a href="#section-13.2.1">サーバが指定した期限</a></dd>
<dd>13.2.2 <a href="#section-13.2.2">帰納的有効期限</a></dd>
<dd>13.2.3 <a href="#section-13.2.3">経過時間の計算</a></dd>
<dd>13.2.4 <a href="#section-13.2.4">期限の計算</a></dd>
<dd>13.2.5 <a href="#section-13.2.5">期限値を曖昧にしない事</a></dd>
<dd>13.2.6 <a href="#section-13.2.6">複数のレスポンスを曖昧にしない事</a></dd>
</dl></dd>
<dd><dl>
<dt>13.3 <a href="#section-13.3">検証{Validation} モデル</a></dt>
<dd>13.3.1 <a href="#section-13.3.1">Last-Modified の日付</a></dd>
<dd>13.3.2 <a href="#section-13.3.2">エンティティタグのキャッシュバリディタ</a></dd>
<dd>13.3.3 <a href="#section-13.3.3">弱いバリディタと強いバリディタ</a></dd>
<dd>13.3.4 <a href="#section-13.3.4">エンティティタグや Last-Modified の日付を使う場合の規定</a></dd>
<dd>13.3.5 <a href="#section-13.3.5">非検証条件</a></dd>
</dl></dd>
<dd>13.4 <a href="#section-13.4">レスポンスのキャッシュ可能性</a></dd>
<dd><dl>
<dt>13.5 <a href="#section-13.5">キャッシュから構築したレスポンス</a></dt>
<dd>13.5.1 <a href="#section-13.5.1">エンドトゥエンドヘッダとホップバイホップヘッダ</a></dd>
<dd>13.5.2 <a href="#section-13.5.2">修正できないヘッダ</a></dd>
<dd>13.5.3 <a href="#section-13.5.3">ヘッダの連結</a></dd>
<dd>13.5.4 <a href="#section-13.5.4">バイトレンジの連結</a></dd>
</dl></dd>
<dd>13.6 <a href="#section-13.6">ネゴシエートされたレスポンスのキャッシング</a></dd>
<dd>13.7 <a href="#section-13.7">共有キャッシュと非共有キャッシュ</a></dd>
<dd>13.8 <a href="#section-13.8">エラーや不完全なレスポンスのキャッシュの振る舞い</a></dd>
<dd>13.9 <a href="#section-13.9">GET と HEAD の副作用</a></dd>
<dd>13.10 <a href="#section-13.10">更新や削除後の無効化</a></dd>
<dd>13.11 <a href="#section-13.11">Write-Through の強制</a></dd>
<dd>13.12 <a href="#section-13.12">キャッシュの代替</a></dd>
<dd>13.13 <a href="#section-13.13">履歴表</a></dd>
<dt>14 <a href="#section-14">ヘッダフィールドの定義</a></dt>
<dd>14.1 <a href="#section-14.1">Accept</a></dd>
<dd>14.2 <a href="#section-14.2">Accept-Charset</a></dd>
<dd>14.3 <a href="#section-14.3">Accept-Encoding</a></dd>
<dd>14.4 <a href="#section-14.4">Accept-Language</a></dd>
<dd>14.5 <a href="#section-14.5">Accept-Ranges</a></dd>
<dd>14.6 <a href="#section-14.6">Age</a></dd>
<dd>14.7 <a href="#section-14.7">Allow</a></dd>
<dd>14.8 <a href="#section-14.8">Authorization</a></dd>
<dd><dl>
<dt>14.9 <a href="#section-14.9">Cache-Control</a></dt>
<dd>14.9.1 <a href="#section-14.9.1">キャッシュ可能とは何か</a></dd>
<dd>14.9.2 <a href="#section-14.9.2">キャッシュによって保存されるものは何か</a></dd>
<dd>14.9.3 <a href="#section-14.9.3">基本的な期限のメカニズムの修正</a></dd>
<dd>14.9.4 <a href="#section-14.9.4">キャッシュの再検証とリロードコントロール</a></dd>
<dd>14.9.5 <a href="#section-14.9.5">No-Transform 指示子</a></dd>
<dd>14.9.6 <a href="#section-14.9.6">キャッシュコントロールの拡張</a></dd>
</dl></dd>
<dd>14.10 <a href="#section-14.10">Connection</a></dd>
<dd>14.11 <a href="#section-14.11">Content-Encoding</a></dd>
<dd>14.12 <a href="#section-14.12">Content-Language</a></dd>
<dd>14.13 <a href="#section-14.13">Content-Length</a></dd>
<dd>14.14 <a href="#section-14.14">Content-Location</a></dd>
<dd>14.15 <a href="#section-14.15">Content-MD5</a></dd>
<dd>14.16 <a href="#section-14.16">Content-Range</a></dd>
<dd>14.17 <a href="#section-14.17">Content-Type</a></dd>
<dd><dl>
<dt>14.18 <a href="#section-14.18">Date</a></dt>
<dd>14.18.1 <a href="#section-14.18.1">時計の無いサーバの動作</a></dd>
</dl></dd>
<dd>14.19 <a href="#section-14.19">ETag</a></dd>
<dd>14.20 <a href="#section-14.20">Expect</a></dd>
<dd>14.21 <a href="#section-14.21">Expires</a></dd>
<dd>14.22 <a href="#section-14.22">From</a></dd>
<dd>14.23 <a href="#section-14.23">Host</a></dd>
<dd>14.24 <a href="#section-14.24">If-Match</a></dd>
<dd>14.25 <a href="#section-14.25">If-Modified-Since</a></dd>
<dd>14.26 <a href="#section-14.26">If-None-Match</a></dd>
<dd>14.27 <a href="#section-14.27">If-Range</a></dd>
<dd>14.28 <a href="#section-14.28">If-Unmodified-Since</a></dd>
<dd>14.29 <a href="#section-14.29">Last-Modified</a></dd>
<dd>14.30 <a href="#section-14.30">Location</a></dd>
<dd>14.31 <a href="#section-14.31">Max-Forwards</a></dd>
<dd>14.32 <a href="#section-14.32">Pragma</a></dd>
<dd>14.33 <a href="#section-14.33">Proxy-Authenticate</a></dd>
<dd>14.34 <a href="#section-14.34">Proxy-Authorization</a></dd>
<dd><dl>
<dt>14.35 <a href="#section-14.35">Range</a></dt>
<dd>14.35.1 <a href="#section-14.35.1">バイトレンジ</a></dd>
<dd>14.35.2 <a href="#section-14.35.2">レンジ更新リクエスト</a></dd>
</dl></dd>
<dd>14.36 <a href="#section-14.36">Referer</a></dd>
<dd>14.37 <a href="#section-14.37">Retry-After</a></dd>
<dd>14.38 <a href="#section-14.38">Server</a></dd>
<dd>14.39 <a href="#section-14.39">TE</a></dd>
<dd>14.40 <a href="#section-14.40">Trailer</a></dd>
<dd>14.41 <a href="#section-14.41">Transfer-Encoding</a></dd>
<dd>14.42 <a href="#section-14.42">Upgrade</a></dd>
<dd>14.43 <a href="#section-14.43">User-Agent</a></dd>
<dd>14.44 <a href="#section-14.44">Vary</a></dd>
<dd>14.45 <a href="#section-14.45">Via</a></dd>
<dd>14.46 <a href="#section-14.46">Warning</a></dd>
<dd>14.47 <a href="#section-14.47">WWW-Authenticate</a></dd>
<dt>15 <a href="#section-15">セキュリティについての考察</a></dt>
<dd><dl>
<dt>15.1 <a href="#section-15.1">個人情報</a></dt>
<dd>15.1.1 <a href="#section-15.1.1">サーバログ情報の乱用</a></dd>
<dd>15.1.2 <a href="#section-15.1.2">機密性の高い情報の転送</a></dd>
<dd>15.1.3 <a href="#section-15.1.3">URI での機密性の高い情報のエンコード</a></dd>
<dd>15.1.4 <a href="#section-15.1.4">Accept ヘッダに関連するプライバシーの問題</a></dd>
</dl></dd>
<dd>15.2 <a href="#section-15.2">ファイル名やパス名に基づく攻撃</a></dd>
<dd>15.3 <a href="#section-15.3">DNS スプーフィング</a></dd>
<dd>15.4 <a href="#section-15.4">Location ヘッダとスプーフィング</a></dd>
<dd>15.5 <a href="#section-15.5">Content-Disposition 問題</a></dd>
<dd>15.6 <a href="#section-15.6">認証用証明書{credentials} と無配慮なクライアント</a></dd>
<dd><dl>
<dt>15.7 <a href="#section-15.7">プロクシとキャッシング</a></dt>
<dd>15.7.1<a href="#section-15.7.1">プロクシを使ったサービス拒否攻撃</a></dd>
</dl></dd>
<dt>16 <a href="#section-16">謝辞</a></dt>
<dt>17 <a href="#section-17">参照文献</a></dt>
<dt>18 <a href="#section-18">筆者のアドレス</a></dt>
<dt>19 <a href="#section-19">付録</a></dt>
<dd>19.1 <a href="#section-19.1">インターネットメディアタイプ message/http と application/http</a></dd>
<dd>19.2 <a href="#section-19.2">インターネットメディアタイプ multipart/byteranges</a></dd>
<dd>19.3 <a href="#section-19.3">寛容なアプリケーション</a></dd>
<dd><dl>
<dt>19.4 <a href="#section-19.4">HTTP のエンティティと RFC 2045 のエンティティとの違い</a></dt>
<dd>19.4.1 <a href="#section-19.4.1">MIME-Version</a></dd>
<dd>19.4.2 <a href="#section-19.4.2">公式形式への変換</a></dd>
<dd>19.4.3 <a href="#section-19.4.3">日付フォーマットの変換</a></dd>
<dd>19.4.4 <a href="#section-19.4.4">内容コーディングの導入</a></dd>
<dd>19.4.5 <a href="#section-19.4.5">No Content-Transfer-Encoding</a></dd>
<dd>19.4.6 <a href="#section-19.4.6">転送エンコーディングの導入</a></dd>
<dd>19.4.7 <a href="#section-19.4.7">MHTML と 行末制限</a></dd>
</dl></dd>
<dd><dl>
<dt>19.5 <a href="#section-19.5">追加機能</a></dt>
<dd>19.5.1 <a href="#section-19.5.1">Content-Disposition</a></dd>
</dl></dd>
<dd><dl>
<dt>19.6 <a href="#section-19.6">前バージョンとの互換性</a></dt>
<dd>19.6.1 <a href="#section-19.6.1">HTTP/1.0 からの変更点</a></dd>
<dd>19.6.2 <a href="#section-19.6.2">HTTP/1.0 持続的接続との互換性</a></dd>
<dd>19.6.3 <a href="#section-19.6.3">RFC 2068 からの変更点</a></dd>
</dl></dd>
<dt>20 <a href="#section-20">索引</a></dt>
<dt>21 <a href="#section-21">著作権表示全文</a></dt>
</dl>
<h2 id="section-1">1 導入</h2>
<h3 id="section-1.1">1.1 目的</h3>
<p>
ハイパーテキスト転送プロトコル (HTTP) は、分散・共同体ハイパーメディア情報システムのアプリケーションレベルプロトコルである。
HTTP は、World-Wide Web グローバル情報利用の先進として、1990 年から使われている。
HTTP の最初のバージョンは、HTTP/0.9 と呼ばれ、インターネットを通じて未加工のデータを転送するための単純なプロトコルであった。
HTTP/1.0 は、RFC 1945 <a href="#ref-6">[6]</a> にて定義され、転送されるデータに関する外部情報とリクエスト/レスポンス意味論{semantics} の修飾子を含んだ MIME のようなメッセージ形式のメッセージを付加する事によってプロトコルを改良した。
しかし、HTTP/1.0 ではプロクシやキャッシングの階層構造、持続的接続の必要性、仮想ホストへの考慮が十分になされていなかった。
さらに、実装が不完全なのに自身を "HTTP/1.0" だと称するアプリケーションの増加で、互いの通信アプリケーションが互いに真の能力を決定するために、プロトコルバージョンを変更する必要性が出てきた。
</p>
<p>
この仕様書では、"HTTP/1.1" と呼ばれるプロトコルを定義している。
このプロトコルはそれらの特徴の確実な実装を保証するため HTTP/1.0 よりも厳格な要求を含んでいる。
</p>
<p>
実際の情報システムは、検索、フロントエンドの更新、注釈等を含む、単純なリソースの回収よりもより多くの機能性を必要としている。
HTTP はリクエストの目的を示すためのメソッドやヘッダの open-ended セットを認めている <a href="#ref-47">[47]</a>。
これは、メソッドが適用されるリソースを示すための location (URL) <a href="#ref-4">[4]</a>や name (URN) <a href="#ref-20">[20]</a>としての Uniform Resource Identifier (URI) <a href="#ref-3">[3]</a>によって供給される参照の規律に基づいている。
メッセージは Multipurpose Internet Mail Extensions (MIME) <a href="#ref-7">[7]</a>にて定義される、インターネットメール <a href="#ref-9">[9]</a>により使用されている物に似たフォーマットで渡される。
</p>
<p>
また HTTP は、ユーザエージェントと SMTP <a href="#ref-16">[16]</a>, NNTP <a href="#ref-13">[13]</a>, FTP <a href="#ref-18">[18]</a>, Gopher <a href="#ref-2">[2]</a>, WAIS <a href="#ref-10">[10]</a>プロトコルをサポートするものを含む、別の情報システムのプロクシ/ゲートウェイ間の通信用の、一般的なプロトコルとしても使用される。
これによって、HTTP は様々なアプリケーションから利用できるリソースへの基本的なハイパーメディアアクセスを可能にする。
</p>
<h3 id="section-1.2">1.2 必要条件</h3>
<p>
この文書中における "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" という各キーワードは、RFC 2119 <a href="#ref-34">[34]</a>にて記述されるように解釈される。
</p>
<p>
もし、ある実装が、そのプロトコルの MUST あるいは REQUIRED レベルの要求の一つ以上を満足できないのならば、その実装は従順なものではない。
もし、ある実装がそのプロトコルのすべての MUST あるいは REQUIRED レベルと、すべての SHOULD レベルの要求を満足していれば、その実装は "無条件に従順" と呼ぶ。
そして、すべての MUST レベルの要求は満たしているが、一つでも SHOULD 要求を満たしていないものは "条件付きで従順" と呼ばれる。
</p>
<h3 id="section-1.3">1.3 専門用語</h3>
<p>
この仕様書では、HTTP 通信に参加する人間、あるいは物を参照するための専門用語をいくつか使用する。
</p>
<dl>
<dt>コネクション {connection}</dt>
<dd>
通信の目的で二つのプログラム間に確立されるトランスポート層の仮想通信路。
</dd>
<dt>メッセージ {message}</dt>
<dd>
section <a href="#section-4">4</a> にて定義される構文を持ち構造化されたオクテットシーケンスから成り、接続を介して転送される、HTTP 通信での基本単位。
</dd>
<dt>リクエスト {request}</dt>
<dd>
section <a href="#section-5">5</a> にあるような、HTTP リクエストメッセージ。
</dd>
<dt>レスポンス {response}</dt>
<dd>
section <a href="#section-6">6</a> にあるような、HTTP レスポンスメッセージ。
</dd>
<dt>リソース {resource}</dt>
<dd>
section <a href="#section-3.2">3.2</a> にて定義されるような、URI によって判別されるネットワークデータオブジェクト、あるいはサービス。
リソースは複数の表現 (例えば、複数の言語、データフォーマット、サイズ、解像度等) で利用したり、別の方法で変更したりできる。
</dd>
<dt>エンティティ {entity}</dt>
<dd>
リクエストやレスポンスの付加物{payload} として転送される情報。
エンティティは、section <a href="#section-7">7</a> で記述されるように、エンティティヘッダフィールドという形での外部情報と、エンティティボディという形での内容から成る。
</dd>
<dt>表現 {representation}</dt>
<dd>
section <a href="#section-12">12</a> にて記述されているような内容ネゴシエーションに従ったレスポンスを含むエンティティ。特定のレスポンスステータスには、関連する複数の表現が存在する事がある。
</dd>
<dt>内容ネゴシエーション {content negotiation}</dt>
<dd>
section <a href="#section-12">12</a> で記述されているように、リクエストを処理する時、適切な表現を選択するためのメカニズム。
エラーレスポンスも含めた、どんなレスポンスにおいてもエンティティの表現はサーバと交渉 {negotiate} される。
</dd>
<dt>バリアント {variant}</dt>
<dd>
リソースはどの瞬間においても一つ、あるいは一つ以上、それに関連付けられた表現を持っている。
それらの表現のそれぞれを `バリアント' と呼ぶ。
`バリアント' という語の使用が、そのリソースが内容ネゴシエーションされているという事を意図するわけではない。
</dd>
<dt>クライアント {client}</dt>
<dd>
リクエストを送信する目的でコネクションを確立するプログラム。
</dd>
<dt>ユーザエージェント {user agent}</dt>
<dd>
リクエストを発行するクライアント。
これらはしばしば、ブラウザ、エディタ、スパイダ (web ロボット)、あるいはその他のエンドユーザツールである。
</dd>
<dt>サーバ {server}</dt>
<dd>
レスポンスを送り返す事で、リクエストを処理するためのコネクションを受け入れるようなアプリケーションプログラム。
プログラムの中にはクライアントとサーバの両方の機能を持つものがある; しかし、ここではこの用語を、一般的なプログラムの機能というよりむしろ、特定のコネクションについてプログラムによって果たされる役割のみのために使用する。
同様に、各リクエストの性質に応じてその振る舞いを、オリジンサーバ、プロクシ、ゲートウェイ、トンネルと切り換えるサーバもある。
</dd>
<dt>オリジンサーバ {origin server}</dt>
<dd>
指定されるリソースが存在するか、あるいは生成されるサーバ。
</dd>
<dt>プロクシ {proxy}</dt>
<dd>
他のクライアントの代わりとしてリクエストを行うためにサーバとクライアントの両方の役割を果たす中継プログラム。
リクエストは、可能な変換をもって、内部で処理されるか、あるいは他のサーバに渡される。
プロクシは、この仕様書が要求するクライアントとサーバの両方の機能を実装し<em>なければならない</em>。
"透過的プロクシ" とは、プロクシへの認証やクライアント自身の証明が要求されるようなもの以外のリクエストやレスポンスを修正しないようなプロクシである。
"透過的でないプロクシ" とは、ユーザエージェントに、ある種の翻訳、メディアタイプの変形、使用プロトコルの制限、匿名性向上のためのフィルタリング等のような、追加的サービスを提供するためにリクエストやレスポンスを修正するようなプロクシである。
その振る舞いが透過的であるか無いかが明言されている部分を除けば、それぞれのプロクシは HTTP プロクシとして必要な要素を共に持ち合わせている。
</dd>
<dt>ゲートウェイ {gateway}</dt>
<dd>
他のサーバを中継するサーバ。
プロクシとは違い、ゲートウェイはまるでリクエストされたリソースのオリジンサーバのように、リクエストを受ける。
リクエストしたクライアントは、それをゲートウェイと通信しているという事を気付かないかもしれない。
</dd>
<dt>トンネル {tunnel}</dt>
<dd>
二つの接続の間をまるで目隠しリレーを行う様に振る舞う中継プログラム。
一度起動したら、それが HTTP リクエストによるものであっても、トンネル自身は HTTP 通信における当事者とみなさない。
トンネルは中継する両端の通信が終了した時、終了する。
</dd>
<dt>キャッシュ {cache}</dt>
<dd>
プログラムがレスポンスメッセージをローカルに記録しておく場所であり、それらメッセージの保存、検索、削除を管理するサブシステムを指す。
キャッシュは、同様のリクエストが起きた際にレスポンス時間やネットワーク帯域幅の消費の軽減のために、キャッシュ可能なレスポンスを保存する。
どのようなクライアントもサーバもキャッシュを持つ事は出来るが、トンネルとして振る舞っているサーバはキャッシュを使用できない。
</dd>
<dt>キャッシュ可能 {cacheable}</dt>
<dd>
レスポンスは、もしキャッシュが後続のリクエストに答えるという目的での使用のために、レスポンスメッセージのコピーを保存する事が許されるならばキャッシュ可能であるという。
HTTP レスポンスのキャッシュ使用の決定の決まりは section 13 にて定義されている。
例えリソースがキャッシュ可能でも、キャッシュは特定のリクエストのためにキャッシュされたコピーを使うかどうかについて制限を受ける可能性がある。
</dd>
<dt>ファーストハンド {first-hand}</dt>
<dd>
レスポンスが、オリジンサーバ、あるいは一つ以上経由したプロクシから不必要な遅れ無しに届くならば、それをファーストハンドであるという。
また、オリジンサーバで有効性を直接チェックされたレスポンスもファーストハンドであるという。
</dd>
<dt>明示的有効期限 {explicit expiration time}</dt>
<dd>
オリジンサーバが、エンティティの有効性の再確認無しにキャッシュを返すべきではないとしている時刻。
</dd>
<dt>帰納的有効期限 {heuristic expiration time}</dt>
<dd>
有効期限が指定されていない時に、キャッシュによって指定される有効期限。
</dd>
<dt>経過時間 {age}</dt>
<dd>
レスポンスの経過時間とは、それがオリジンサーバから送られてから、あるいはオリジンサーバによって十分に有効性が確認された時からの時間を指す。
</dd>
<dt>有効期間 {freshness lifetime}</dt>
<dd>
レスポンスが生成されてから有効期限までの時間の長さ。
</dd>
<dt>新鮮である {fresh}</dt>
<dd>
その経過時間がその有効期間を経過していなければ、レスポンスは新鮮であるという。
</dd>
<dt>新鮮でない {stale}</dt>
<dd>
その経過時間がその有効期間を経過していなければ、レスポンスは新鮮であるという。
</dd>
<dt>意味的に透過である {semantically transparent}</dt>
<dd>
キャッシュは、パフォーマンスの向上以外に、リクエストしたクライアントにもオリジンサーバにも影響が無い時、特定のレスポンス関して、意味的に透過な方法で振る舞う。
キャッシュが意味的に透過な時、クライアントはオリジンサーバから直接処理された時に受け取るであろうリクエストと全く同じレスポンスを受け取る。(ホップバイホップヘッダを除く)
</dd>
<dt>バリディタ {validator}</dt>
<dd>
キャッシュ内にあるリソースが、エンティティのコピーと同等かどうかがわかるとされている (例えば、エンティティタグや <span class="Header">Last-Modified</span> 時刻等の) プロトコルエレメント。
</dd>
<dt>アップストリーム/ダウンストリーム {upstream/downstream}</dt>
<dd>
アップストリームとダウンストリームとは、メッセージの流れを表す。
すべてのメッセージは、上流{upstream} から下流{downstream} へと流れる。
</dd>
<dt>インバウンド/アウトバウンド {inbound/outbound}</dt>
<dd>
インバウンドとアウトバウンドは、メッセージを送るためのリクエストとレスポンスの道のりに従う。
"インバウンド" とは "オリジンサーバに向かって行く事" を、"アウトバウンド" とは "ユーザエージェントに向かって行く事" を、それぞれ意味する。
</dd>
</dl>
<h3 id="section-1.4">1.4 全体の動作</h3>
<p>
HTTP プロトコルはリクエスト/レスポンスプロトコルである。
クライアントは、サーバへの接続上で、リクエストメソッド、URI、そしてプロトコルバージョン、その後にリクエスト修飾子、クライアント情報、可能であれば内容本体を含んだ MIME のようなメッセージ形式をサーバにリクエストとして送る。
サーバは、メッセージのプロトコルバージョンと成功か失敗を表すコードを含むステータス行に続き、サーバ情報、エンティティメタ情報、可能であればエンティティボディの内容を含む MIME のようなメッセージで応答する。
HTTP と MIME の関係は、付録 <a href="#section-19.4">19.4</a> に記述されている。
</p>
<p>
多くの HTTP 接続は、ユーザエージェントによって開始され、あるオリジン
サーバ上のリソースに適用するためのリクエストから成り立つ。この最も簡
単な場合、ユーザエージェント (UA) とオリジンサーバ (O) との間の単一接
続経由 (v) で成し遂げられるだろう。
</p>
<pre> request chain ------------------------>
UA -------------------v------------------- O
<----------------------- response chain
</pre>
<p>
リクエスト/レスポンス連鎖中に一つ以上の中継者が現れると、状況はより複雑になる。
一般的な中継者には、プロクシ、ゲートウェイ、トンネルの三つが存在する。
プロクシは、その絶対形式の URI のリクエストを受け取り、メッセージのすべてもしくは一部を書き換え、URI によって識別されるサーバに再フォーマットされたリクエストを転送する転送エージェントである。
ゲートウェイは、ある別のサーバ (群) の上の層として動作し、もし必要ならリクエストを根底にあるサーバのプロトコルに変換するための受信エージェントである。
トンネルは、メッセージを変更する事なく二つの接続間の中継点として動作する。
トンネルは通信が (ファイアウォールのような) 中継者を通して伝えられる必要がある時、さらに中継者がメッセージの内容を理解できない時に使用される。
</p>
<pre> request chain -------------------------------------->
UA -----v----- A -----v----- B -----v----- C -----v----- O
<------------------------------------- response chain
</pre>
<p>
上図は、ユーザエージェントとオリジンサーバの間の三中継者 (A, B, C) を表している。
リクエストやレスポンスのメッセージが移動する全体の連鎖は四つに分ける事ができるであろう。
HTTP 通信オプションによっては、適用できる範囲が、隣の接続にのみだったり、トンネルではない隣接接続だったり、連鎖の終末のみだったり、あるいは連鎖上のすべての接続に適用できたりするので、この区別は重要である。
図形では線形であるが、それぞれが複数に、また同時に通信を行う事ができる。例えば、B は A からのリクエストを処理すると同時に、A 以外の多くのクライアントからリクエストを受信しているかもしれないし、あるいは C 以外のサーバにリクエストを転送しているかもしれない。
</p>
<p>
トンネルとして動作していない通信のすべてのパーティは、内部的なキャッシュやリクエスト処理に使用できる。
キャッシュの効果とは、もし連鎖上に連なるある一つがそのリクエストに適用できるキャッシュされたレスポンスを持っているなら、リクエスト/レスポンス連鎖を短縮する事である。
以下では、もし B が、UA や A がキャッシュしていないリクエストに対する O からの (C を経由した) 以前のレスポンスのキャッシュされたコピーを持っている場合の結果となる連鎖を説明している。
</p>
<pre> request chain ---------->
UA -----v----- A -----v----- B - - - - - - C - - - - - - O
<--------- response chain
</pre>
<p>
すべてのレスポンスがキャッシュ可能であるわけではなく、いくつかのリクエストではキャッシュの動作への特別な要求を行う修飾子を含む事ができる。
キャッシュの動作やキャッシュ可能なレスポンスに対する HTTP の要求は section <a href="#section-13">13</a> で定義されている。
</p>
<p>
事実、現在 World Wide Web 上にて実験され、設置されているキャッシュとプロクシには幅広い種類のアーキテクチャやコンフィギュレーションがある。
これらのシステムには、海を渡るような通信{transoceanic} のバンド幅を節約するためにプロクシキャッシュを全国的な組織が階層的に管理するもの{national hierarchies} や、エントリしているキャッシュを放送するためのシステムや、CD-ROM を使ってキャッシュされたデータのサブセットを配布する組織等も含む。
HTTP システムは、高バンド幅通信上の社内イントラネットでも、そして非力なラジオ通信や断続的な接続を使う PDA 経由でアクセスするためにも使用される。
HTTP/1.1 が目指すものは、高い信頼性と、もし失敗するとしても少なくとも確実な徴候が要求されるウェブアプリケーションを作る人間のニーズに合ったプロトコル構造を取り入れていく一方で、既に設置されている幅広い多様なコンフィギュレーションをサポートする事である。
</p>
<p>
HTTP 通信は、普通 TCP/IP 接続上で行う。
既定ポートは TCP 80 であるが、他のポートを使用する事もできる <a href="#ref-19">[19]</a>。
これは、インターネットや他のネットワーク上の別のプロトコルの最上部として、HTTP を実装する事を排除しない。
HTTP は確実な転送のみを前提し、そのような保証を供給するどんなプロトコルでも使用できる。
問題においてプロトコルのデータ転送ユニット上の HTTP/1.1 リクエストとレスポンス構造のマッピングはこの仕様書の範疇を超える。
</p>
<p>
HTTP/1.0 では、ほとんどの実装はそれぞれのリクエスト/レスポンスを交換するために新しい接続を使用していた。
HTTP/1.1 では、接続は一つ以上のリクエスト/レスポンス交換に使用できるが、レスポンスの種類によっては接続が切断されるかもしれない (section <a href="#section-8.1">8.1</a> 参照)。
</p>
<h2 id="section-2">2 表記の慣習と一般文法</h2>
<h3 id="section-2.1">2.1 拡張 BNF</h3>
<p>
この文書において詳述されるメカニズムのすべては、単調 Backus-Naur Form (BNF) と、RFC 822 <a href="#ref-9">[9]</a> で使用されているものに似た拡張 BNF との両方で記述されている。
実装者は、この仕様書を理解するためにこの表記法に精通している必要があるだろう。
拡張 BNF は以下の構造を含んでいる。
</p>
<dl>
<dt>name = definition</dt>
<dd>
name とは、("<" と ">"で囲まれているものを除き) 単純にそれ自身の名前であり、その定義とは等号 "=" 文字によって分割されている。
空白は、二行以上に渡る規定の定義を示すために使われる連続行の行頭空白においてのみ意味を持つ。
特定の基本的な規定は SP, LWS, HT, CRLF, DIGIT, ALPHA 等のように大文字である。
角括弧は、それらの存在が規定名の使用の理解を容易にするであろうときに定義の中に使用される。
</dd>
<dt>"literal"</dt>
<dd>
クォーテーション記号はリテラルテキストを囲む。
もし特に明言されなければ、テキストは大文字・小文字を区別しない。
</dd>
<dt>rule1 | rule2</dt>
<dd>
バー ("|") で区切られた要素は二者択一である。例えば "yes | no" は
yes か no を受け入れるだろう。
</dd>
<dt>(rule1 rule2)</dt>
<dd>
括弧で囲まれた要素は単一の要素として扱われる。
従って、"(elem (foo | bar) elem)" は、トークンシーケンス "elem foo elem" と "elem bar elem" を認める。
</dd>
<dt>*rule</dt>
<dd>
要素の前にある "*" 文字は繰り返しを意味する。
完全な形式は "<n>*<m>element" で、これは element 出現が最低<n>、最大<m>である事を示している。
既定値は 0 と無限なので、"*(element)" はゼロを含むどんな回数も可能であり、"1*element" は最低一つ、"1*2element" は一つか二つが可能である。
</dd>
<dt>[rule]</dt>
<dd>
角括弧は省略可能な要素を囲む。
すなわち、"[foo bar]" は "*1(foo bar)" と同等である。
</dd>
<dt>N rule</dt>
<dd>
具体的な繰り返し。
"<n>(element)" は "<n>*<n>(element)" と同等である。
これは、(element) の出現が確実に <n> 存在する。
従って 2DIGIT は二文字の数字であり、3ALPHA は三文字のアルファベット文字の文字列である。
</dd>
<dt>#rule</dt>
<dd>
"#" 構造は、"*" と似て、要素のリストを定義するために定義されている。
完全な形式は "<n>#<m>element" で、これは element が最低 <n>、最大 <m> の存在を示していて、それぞれは一つ以上のコンマ(",")と<em>省略可能な</em>連続空白(LWS)で区切られる。