ネットワーク作業グループ RFC:2068 カテゴリ:標準化過程 |
R. Fielding UC Irvine J. Gettys J. Mogul DEC H. FrystykM T. Berners-Lee MIT/LCS 1997年 1月 |
このメモの現状
この文書は,インターネット・コミュニティのためのインター
ネット標準化過程を規定し,議論と改善のための提案を求めるも
のである。本プロトコルの標準化状況と現状については,「イン
ターネット公式プロトコル標準」(STD 1)の最新版を参照せよ。こ
のメモの配布は無制限である。
概要
ハイパーテキスト伝送プロトコル(HTTP)は,分散・協調的ハイパ
ーメディア情報システムのためのアプリケーション・レベルのプロ
トコルである。それは,リクエスト法の拡張を通じてネームサーバ
や分散オブジェクト管理システムのような多くの仕事のために利用
可能な一般的でステートレスな(状態を保持しない)オブジェクト志
向プロトコルである。HTTPの特徴は,伝送されるデータとは独立し
てシステム構築可能であるデータ表現の型分類と(受け手と送り手の
間の)ネゴシエーションである。
HTTPは,1990年以来,WWW(World-Wide Web)グローバル情報の先駆
けとしてずっと使用されている。この仕様は「HTTP/1.1」として参照
されるプロトコルを定める。
内容 1 まえがき .............................................. 7 1.1 目的 ............................................... 7 1.2 要求事項 ........................................... 7 1.3 用語 ............................................... 8 1.4 全体的運用 ........................................ 11 2 表記上の慣習と一般的文法 ............................. 13 2.1 拡張BNF(Backus-Naur Form) ......................... 13 2.2 基本ルール ........................................ 15 3 プロトコル・パラメータ ............................... 17 3.1 HTTPバージョン .................................... 17 3.2 URI(Uniform Resource Identifiers) ................. 18 3.2.1 一般的シンタックス ............................. 18 3.2.2 http URL ....................................... 19 3.2.3 URIの比較 ...................................... 20 3.3 日付/時間フォーマット ............................. 21 3.3.1 詳細日付 ...................................... 21 3.3.2 増分秒 ......................................... 22 3.4 文字セット ........................................ 22 3.5 コンテント符号化 .................................. 23 3.6 伝送符号化 ........................................ 24 3.7 メディアタイプ .................................... 25 3.7.1 標準化とテキストのデフォルト値 ................. 26 2.7.2 マルチパートタイプ ............................. 27 3.8 製品トークン ...................................... 28 3.9 クオリティ値 ...................................... 28 3.10 言語タグ ......................................... 28 3.11 エンティティタグ(Entity Tags) .................... 29 3.12 単位(Range Units) ................................ 30 4 HTTPメッセージ ....................................... 30 4.1 メッセージタイプ ................................. 30 4.2 メッセージヘッダ .................................. 31 4.3 メッセージボディ .................................. 32 4.4 メッセージ長 ...................................... 32 4.5 一般ヘッダフィールド .............................. 34 5 リクエスト ........................................... 34 5.1 リクエストライン .................................. 34 5.1.1 メソッド ....................................... 35 5.1.2 リクエストURI .................................. 35 5.2 リクエスト指定リソース ............................ 37 5.3 リクエストヘッダフィールド ........................ 37 6 レスポンス ........................................... 38 6.1 ステータスライン .................................. 38 6.1.1 ステータスコードと説明文 ...................... 39 6.2 レスポンスヘッダフィールド ........................ 41 7 エンティティ ......................................... 41 7.1 エンティティヘッダフィールド ...................... 41 7.2 エンティティボディ ................................ 42 7.2.1 タイプ ......................................... 42 7.2.2 長さ ........................................... 43 8 コネクション ......................................... 43 8.1 パーシステント(永続)コネクション .................. 43 8.1.1 目的 ........................................... 43 8.1.2 概略の運用 ..................................... 44 (8.1.2.1 ネゴシエーション ............................ 44) (8.1.2.2 パイプライン ................................ 44) 8.1.3 プロキシサーバ ................................. 45 8.1.4 実際的検討 ..................................... 45 8.2 メッセージ伝送上の要求事項 ........................ 46 9 メソッドの定義 ....................................... 48 9.1 安全・同一メソッド ................................ 48 9.1.1 安全なメソッド ................................. 48 9.1.2 同一のメソッド ................................. 49 9.2 OPTIONS ........................................... 49 9.3 GET ............................................... 50 9.4 HEAD .............................................. 50 9.5 POST .............................................. 51 9.6 PUT ............................................... 52 9.7 DELETE ............................................ 53 9.8 TRACE ............................................. 53 10 ステータスコードの定義 .............................. 53 10.1 通報的 1xx ....................................... 54 10.1.1 100 Continue(継続) ............................ 54 10.1.2 101 Switching Protocols(プロトコル変更) ....... 54 10.2 成功 2xx ......................................... 54 10.2.1 200 OK ........................................ 54 10.2.2 201 Created ................................... 55 10.2.3 202 Accepted .................................. 55 10.2.4 203 Non-Authoritative Information ............. 55 10.2.5 204 No Content ................................ 55 10.2.6 205 Reset Content ............................. 56 10.2.7 206 Partial Content ........................... 56 10.3 リダイレクション 3xx ............................. 56 10.3.1 300 Multiple Choices .......................... 57 10.3.2 301 Moved Permanently ......................... 57 10.3.3 302 Moved Tempolarily ......................... 58 10.3.4 303 See Other ................................. 58 10.3.5 304 Not Modified .............................. 58 10.3.6 305 Use Proxy ................................. 59 10.4 クライアントエラー 4xx ........................... 59 10.4.1 400 Bad Request ............................... 60 10.4.2 401 Unauthorized .............................. 60 10.4.3 402 Payment Required .......................... 60 10.4.4 403 Forbidden ................................. 60 10.4.5 404 Not Found ................................. 60 10.4.6 405 Method Not Allowed ........................ 61 10.4.7 406 Not Acceptable ............................ 61 10.4.8 407 Proxy Authentification Required ........... 61 10.4.9 408 Request Timeout ........................... 62 10.4.10 409 Conflict ................................. 62 10.4.11 410 Gone ..................................... 62 10.4.12 411 Length Required .......................... 63 10.4.13 412 Precondition Failed ...................... 63 10.4.14 413 Request Entity Too Large ................. 63 10.4.15 414 Request-URI Too Long ..................... 63 10.4.16 415 Unsupported Media Type ................... 63 10.5 サーバエラー 5xx ................................. 64 10.5.1 500 Internal Server Error ..................... 64 10.5.2 501 Not Implemented ........................... 64 10.5.3 502 Bad Gateway ............................... 64 10.5.4 503 Service Unavailable ....................... 64 10.5.5 504 Gateway Timeout ........................... 64 10.5.6 505 HTTP Version Not Supported ................ 65 11 アクセス認証 ........................................ 65 11.1 基本認証スキーム ................................. 66 11.2 ダイジェスト認証スキーム ......................... 67 12 コンテントネゴシエーション .......................... 67 12.1 サーバ駆動ネゴシエーション ....................... 68 12.2 エージェント駆動ネゴシエーション ................. 69 12.3 トランスペアレントネゴシエーション ............... 70 13 HTTPにおけるキャッシング ............................ 70 13.1.1 キャッシュの正確さ ............................ 72 13.1.2 警告 .......................................... 73 13.1.3 キャッシュ制御機構 ............................ 74 13.1.4 陽なユーザエージェント警告 .................... 74 13.1.5 ルールと警告に対する例外事項 .................. 75 13.1.6 クライアント制御行動 .......................... 75 13.2 期限切れモデル ................................... 75 13.2.1 サーバ指定の期限切れ .......................... 75 13.2.2 発見的期限切れ ................................ 76 13.2.3 期限計算 ...................................... 77 13.2.4 期限切れ計算 .................................. 79 13.2.5 期限切れ値の明確化 ............................ 80 13.2.6 多重レスポンスの明確化 ........................ 80 13.3 有効化モデル ..................................... 81 13.3.1 Last-Modified Date(最終修正日付) .............. 82 13.3.2 エンティティタグキャッシュバリデータ .......... 82 13.3.3 弱/強バリデータ ............................... 82 13.3.4 エンティティタグ/最終修正日付を 何時用いるかのルール .......................... 85 13.3.5 条件付非有効化 ................................ 86 13.4 レスポンスのキャッシュ可能性 ..................... 86 13.5 キャッシュからのレスポンス構成 ................... 87 13.5.1 End-to-end/Hop-by-hopヘッダ ................... 88 13.5.2 非修正ヘッダ .................................. 88 13.5.3 結合ヘッダ .................................... 89 13.5.4 結合バイト長 .................................. 90 13.6 キャッシュネゴシエーションレスポンス ............. 90 13.7 シェアード/ノンシェアードキャッシュ .............. 91 13.8 エラーまたは不完全レスポンスキャッシュ行動 ....... 91 13.9 GETとHEADの副次効果 .............................. 92 13.10 更新または削除後の無効化 ........................ 92 13.11 同時書込み委託 .................................. 93 13.12 キャッシュ置換え ................................ 93 13.13 ヒストリーリスト ................................ 93 14 ヘッダフィールドの定義 .............................. 94 14.1 Accept ........................................... 95 14.2 Accept-Charset ................................... 97 14.3 Accept-Encoding .................................. 97 14.4 Accept-Language .................................. 98 14.5 Accept-Ranges .................................... 99 14.6 Age .............................................. 99 14.7 Allow ........................................... 100 14.8 Authorization ................................... 100 14.9 Cache-Control ................................... 101 14.9.1 何がキャッシュ可能か ......................... 103 14.9.2 何がキャッシュに保存できるか ................. 103 14.9.3 基本期限切れ機構の修正 ....................... 104 14.9.4 キャッシュ再有効化とリロード制御 ............. 105 14.9.5 非変換指定 ................................... 107 14.9.6 キャッシュ制御の拡張 ......................... 108 14.10 Connection ..................................... 109 14.11 Content-Base ................................... 109 14.12 Content-Encoding ............................... 110 14.13 Content-Language ............................... 110 14.14 Content-Length ................................. 111 14.15 Content-Location ............................... 112 14.16 Content-MD5 .................................... 113 14.17 Content-Range .................................. 114 14.18 Content-Type ................................... 116 14.19 Date ........................................... 116 14.20 ETag ........................................... 117 14.21 Expires ........................................ 117 14.22 From ........................................... 118 14.23 Host ........................................... 119 14.24 If-Modified-Since .............................. 119 14.25 If-Match ....................................... 121 14.26 If-None-Match .................................. 122 14.27 If-Range ....................................... 123 14.28 If-Unmodified-Since ............................ 124 14.29 Last-Modified .................................. 124 14.30 Location ....................................... 125 14.31 Max-Forwards ................................... 125 14.32 Pragma ......................................... 126 14.33 Proxy-Authenticate ............................. 127 14.34 Proxy-Authorization ............................ 127 14.35 Public ......................................... 127 14.36 Range .......................................... 128 14.36.1 バイト長 .................................... 128 14.36.2 データ長回復リクエスト ...................... 130 14.37 Referer ........................................ 131 14.38 Retry-After .................................... 131 14.39 Server ......................................... 132 14.40 Transfer-Encoding .............................. 132 14.41 Upgrade ........................................ 132 14.42 User-Agent ..................................... 134 14.43 Vary ........................................... 134 14.44 Via ............................................ 135 14.45 Warning ........................................ 137 14.46 WWW-Authenticate ............................... 139 15 セキュリティの検討 ................................. 139 15.1 クライアント認証 ................................ 139 15.2 認証スキームの選択の提供 ........................ 140 15.3 サーバログ情報の乱用 ............................ 141 15.4 取扱いに慎重さを要する情報の伝送 ................ 141 15.5 ファイルおよびパス名に基づくアタック ............ 142 15.6 個人的情報 ...................................... 143 15.7 Acceptヘッダに関係するプライバシー問題 .......... 143 15.8 DNS スプーフィング .............................. 144 15.9 Locationヘッダとスプーフィング .................. 144 16 謝辞 ............................................... 144 17 文献 ............................................... 146 18 著者の住所 ......................................... 149 19 付録 ............................................... 150 19.1 インターネットメディアタイプmessage/http ........ 150 19.2 インターネットメディアタイプmultipart/byteranges 150 19.3 トレラントなアプリケーション .................... 151 19.4 HTTPおよびMIMEエンティティの間の差異 ............ 152 19.4.1 標準フォームへの変換 ......................... 152 19.4.2 データフォーマットの変換 ..................... 153 19.4.3 Content-Encodingの導入 ....................... 153 19.4.4 Content-Transfer-Encodingなし ................ 153 19.4.5 マルチパートボディの部分における HTTPヘッダフィールド ......................... 153 19.4.6 Transfer-Encodingの導入 ...................... 154 19.4.7 MIMEバージョン ............................... 154 19.5 HTTP/1.0からの変更点 ............................ 154 19.5.1 マルチホームWebサーバを簡略化しIPアドレスを 保存するための変更点 ......................... 155 19.6 付加的な特徴 .................................... 156 19.6.1 付加的なリクエストメソッド ................... 156 19.6.2 付加的なヘッダフィールドの定義 ............... 156 19.7 前バージョンとの互換性 .......................... 160 19.7.1 HTTP/1.0パーシステントコネクションとの互換性 . 161
1 まえがき
1.1 目的
ハイパーテキスト伝送プロトコル(HTTP)は,分散・協調的ハイパ
ーメディア情報システムのためのアプリケーション・レベルのプロ
トコルである。HTTPは1990年以来, World-Wide Web グローバル情
報の先駆けとして使われている。HTTP/0.9として参照されるHTTPの
最初のバージョンは,インターネットを通した生のデータ伝送のた
めの単純なプロトコルである。RFC1945[6]で定義されるHTTP/1.0は,
MIMEライクなメッセージフォーマットによるメッセージを許容し,
伝送データに関するメタ情報およびリクエスト/レスポンス構文に関
する修正(modefiers)を含むことによりプロトコルを改善した。しか
し,HTTP/1.0は,階層的プロキシ,キャッシングの効果,パーシス
テント(永続)コネクション,およびバーチャルホストの必要性を十
分考慮していない。加えて,不充分な実装ながら十分な成果をもた
らした"HTTP/1.0"と呼ばれるアプリケーションは,二つの通信アプ
リケーションがお互いの真の能力を決定付けるためにプロトコルバ
ージョンの変更を必要としている。
この仕様は"HTTP/1.1"として参照されるプロトコルを定義する。
このプロトコルは,その特徴である高信頼の実装(implementation)
を確実なものにするため,HTTP/1.0より厳格な要求を含む。
実際の情報システムは,検索,フロントエンド更新および注釈を
含む単純な修正より以上の機能性を求める。HTTPはリクエストの目
的を示すオープンエンドなメソッド集合を許容する。それは,メソ
ッドの適用対象であるリソースを指示するため,URI(Uniform
Resource Identifier)[3],[20], ロケーション(URL)[4]または名前
(URN)により与えられた参照規範上に立脚する。メッセージは,多目
的インターネットメール拡張機能(MIME)によって定義され,インタ
ーネットメールで用いられるものと類似のフォーマットで通過する。
HTTPはまた,SMTP[16], NNTP[13], FTP[18], Gopher[2],WAIS[10]
プロトコルでサポートされるものを含む他のインターネットシステ
ムへのユーザエージェントとプロキシ/ゲートウエイ間通信のための
一般的プロトコルとして利用される。このように,HTTPは,多様な
アプリケーションから利用可能なリソースに対する基本的なハイパ
ーメディアアクセスを許す。
1.2 要求事項
この仕様は,個々の特殊な要求の意味を明確にするために,RFC1123
[8]と同様な語を用いる。これらの語は次の通りである:
MUST
この語または形容詞"required"は,この項が仕様上絶対の要求であ
ることを意味する。
SHOULD
この語または形容詞"recommended"は,特別な状況下でこの項を無
視する有効な理由があるかもしれないが,十分な意味が理解された方
が良く,そして,他の選択をする前に注意深く検討する場合があるか
もしれないことを意味する。
MAY
この語あたは形容詞"optinal"は,この項が新に選択的であること
を意味する。あるベンダーは,特別の市場がそれを要求するかまたは
それが製品が強化する,例えば,他のベンダーが同じ項を除去するか
もしれないからこの項を含めることを選択するかもしれない。
ある実装は,もしそれが実装されるプロトコルに対する1以上の MUST要求事項を満すことに失敗すれば,受け入れられない(not compliant)。プロトコルに対するすべての"MUST"とすべての"SHOULD" 要求事項を満たす実装は,"無条件受け入れ(unconditionally compliant)" と言われる。また,プロトコルに対するすべての"MUST"と必ずしもすべて でない"SHOULD"要求事項を満たすものは,"条件付き受け入れ(conditionally compliant)"と言われる。
1.3 用語集
この仕様は,HTTP通信の参加者と目的によって果たさせる役割に
関連して多くの用語を使う。
コネクション(connection)
通信の目的で2つのプログラム間に確立されるトランスポート層
のバーチャルサーキット
メッセージ(message)
HTTP通信の基本単位であり,第4章で定義されるシンタックス(文法)
と整合し,コネクション経由で伝送される構造化したオクテット列(*)か
らなる。
* 8ビット(すなわち1バイト)を時間的に並べたものを言う。
リクエスト(request)
第5章で定義されるHTTPリクエストメッセージ
レスポンス(response)
第6章で定義されるHTTPレスポンスメッセージ
リソース(resource)
第3.2節で定義されるURIによって規定され得るネットワークデータ
オブジェクトまたはサービス。リソースは多数の表現(多言語,データ
フォーマット,サイズ,リゾリューション(resolutions))で利用可能
であり,または他のやり方で変化するかもしれない。
エンティティ(entity)
リクエストまたはレスポンスのペイロード(payload)として伝送され
る情報。エンティティは,エンティティヘッダフィールドの形のメタ
情報および第7章で記述されるエンティティボディの形のコンテント
(内容)からなる。
リプレゼンテーション(representation)
第12章で記述されるコンテントネゴシエーションに従うレスポンス
に含まれるエンティティ。
コンテントネゴシエーション(conntennt negotiation)
第12章で記述されるように,リクエストにサービスするとき,適切な
リプレゼンテーションを選択するためのメカニズム。どんなレスポンス
においてもエンティティのリプレゼンテーションは,(エラーレスポンス
を含み)ネゴシエーションされ得る。
バリアント(variant)
リソースは,与えられた時点でそれと関連する一つまたは一つ以上の
リプレゼンテーションを持つかもしれない。これらのリプレゼンテーシ
ョンは'バリアント(variant)'と呼ばれる。用語'バリアント'の使用は,
リソースがコンテントネゴシエーションに従うとことを必ずしも意味
しない。
クライアント(client)
リクエストを送るためにコネクションを確立するプログラム。
ユーザエージェント(user agent)
リクエストを始めるクライアント。これらはしばしばブラウザ,
エディタ,スパイダ(Web検索ロボット),または他のエンドユーザ
ツールである。
サーバ(server)
レスポンスを送り返すことによってリクエストにサービスするための
コネクションを受け入れるアプリケーションプログラム。与えられた
どのようなプログラムもクライアントとサーバ両方でありうる能力を
持ち,これらの用語の使用は,プログラムの一般的能力というよりむしろ
特定のコネクションのためのプログラムによって達成される役割のみに
参照される。同様に,どのようなサーバも,個々のリクエストの性質に
基づき接続変更するオリジンサーバ,プロキシ,ゲートウエイ,または
トンネルとして動作するかもしれない。
オリジンサーバ(origin server)
与えられたリソースが存在し,または創成されることになっている
サーバ
プロキシ(proxy)
他のクライアントのためにリクエストを生成する目的でサーバおよび
クライアント両方として動作する仲介プログラム。リクエストは,他の
サーバに対して可能な読み替え(translation)を行ない,内部的または
それらを通過することによってサービスを受ける。プロキシはこの仕様の
クライアントおよびサーバ要求事項の両方が実装されなければならない。
ゲートウエイ(gatway)
あるほかのサーバに対して仲介物として動作するサーバ。プロキシとは
異なり,ゲートウエイは,リクエストされたリソースに対してあたかも
オリジンサーバであるかのようにリクエストをサービスし,そのとき,
リクエストしているクライアントはゲートウエイトと通信しているとは
気付かないかもしれない。
トンネル(tunnel)
二つのコネクション間のブラインドリレー(blind relay)として動作する
仲介プログラム。トンネルが一度動作すると,トンネルがHTTPリクエスト
によって起動されたとしても,HTTP通信の仲間とはみなされない。トンネル
はリレーされるコネクションの末端双方が閉じられたとき存在を停止する。
キャッシュ(cache)
レスポンスメッセージのプログラムのローカルな蓄積であり,メッセージ
記憶装置,修正,削除を制御するサブシステム。キャッシュは,将来の
同等なリクエストについてレスポンス時間とネットワークの帯域消費を減じ
るためのキャッシュ可能なレスポンスを蓄積する。キャッシュはトンネルと
して動作するサーバでは使用できないが,どのようなクライアントまたは
サーバもキャッシュを含むかもしれない。
キャッシュ可能(cachable)
レスポンスは,もしキャッシュが引き続くリクエストに応える使用の
ためにレスポンスメッセージのコピーを蓄積することを許すならば,
キャッシュ可能である。HTTPレスポンスのキャッシュ可能性を決定する
ためのルールは第13章に定義される。もしリソースがキャッシュ可能と
しても,キャッシュがキャッシュされたコピーを特別のリクエストに
使えるかどうかについては付加的な制約があるかも知れない。
直接入手(first-hand)
レスポンスは,もしそれがオリジンサーバから直接または,恐らく
一つ以上のプロキシ経由で不必要な遅延(delay)なしに来る場合,
直接入手(first-hand)である。また,レスポンスは,もしその有効性が
オリジンサーバで直接チェックされたばかりであるならば,直接入手で
ある。
陽な期限切れ時間(explicit expiration time)
オリジンサーバが,エンティティが更なる有効化なしにキャッシュに
よって切替えられるべきでないと意図した時間。
発見的期限切れ時間(heuristic expiration time)
陽な期限切れ時間が利用できないときキャッシュによって割り当てられた
期限切れ時間。
年齢(Age)
レスポンスの年齢とは,オリジンサーバから送られたかまたはうまく
有効化されてからの時間のことである。
フレッシュネスライフタイム(freshness lifetime)>
レスポンスの発生と期限切れ時間の間の時間長。
フレッシュ(fresh)
レスポンスは,もしその年齢がまだフレッシュネスライフタイムを
経過していなければフレッシュである。
ステール(stale)
レスポンスは,もしその年齢がフレッシュネスライフタイムを
経過していればステールである(古臭い)。
構文的トランスペアレント(semantically transparent)
キャッシュは,パフォーマンス改善を除いて,その使用がリクエスト
しているクライアントとオリジンサーバのいずれにも影響しないとき,
特別のレスポンスに関して構文的トランスペアレントに振舞う。キャッシュ
が構文的トランスペアレントであるとき,クライアントはそれが受取ったで
あろうそしてオリジンサーバによってリクエストを直接処理してもらう同じ
レスポンスを正確に受取る(hop-by-hopヘッダの場合を除いて)。
バリデーター(validator)
キャッシュエンティティがエンティティのコピーと等価かどうか見出す
ために使用するプロトコルエレメント(例,エンティティタグまたは最終
更新時間(Last-Modified time))。