HTTP-メッセージ
HTTPは、クライアントサーバーアーキテクチャモデルと、信頼性の高いTCP / IP接続を介してメッセージを交換することによって動作するステートレスな要求/応答プロトコルに基づいています。
HTTP「クライアント」は、1つ以上のHTTP要求メッセージを送信する目的でサーバーへの接続を確立するプログラム(Webブラウザーまたはその他のクライアント)です。HTTP「サーバー」は、HTTP応答メッセージを送信してHTTP要求を処理するために接続を受け入れるプログラム(通常、Apache WebサーバーやインターネットインフォメーションサービスIISなどのWebサーバー)です。
HTTPは、Uniform Resource Identifier(URI)を使用して、特定のリソースを識別し、接続を確立します。接続が確立されると、HTTP messagesインターネットメール[RFC5322]および多目的インターネットメール拡張機能(MIME)[RFC2045]で使用されるものと同様の形式で渡されます。これらのメッセージには次のものが含まれますrequests クライアントからサーバーへそして responses サーバーからクライアントへ。次の形式になります。
HTTP-message = <Request> | <Response> ; HTTP/1.1 messages
HTTP要求とHTTP応答は、必要なデータを転送するためにRFC822の一般的なメッセージ形式を使用します。この一般的なメッセージ形式は、次の4つの項目で構成されています。
- A Start-line
- Zero or more header fields followed by CRLF
- An empty line (i.e., a line with nothing preceding the CRLF) indicating the end of the header fields
- Optionally a message-body
次のセクションでは、HTTPメッセージで使用される各エンティティについて説明します。
メッセージスタートライン
スタートラインの一般的な構文は次のとおりです。
start-line = Request-Line | Status-Line
HTTPリクエストメッセージとHTTPレスポンスメッセージについてそれぞれ説明しながら、リクエストラインとステータスラインについて説明します。とりあえず、リクエストとレスポンスの場合のスタートラインの例を見てみましょう。
GET /hello.htm HTTP/1.1 (This is Request-Line sent by the client)
HTTP/1.1 200 OK (This is Status-Line sent by the server)
ヘッダーフィールド
HTTPヘッダーフィールドは、要求または応答、またはメッセージ本文で送信されるオブジェクトに関する必要な情報を提供します。HTTPメッセージヘッダーには次の4つのタイプがあります。
General-header: これらのヘッダーフィールドは、要求メッセージと応答メッセージの両方に一般的に適用できます。
Request-header: これらのヘッダーフィールドは、リクエストメッセージにのみ適用できます。
Response-header: これらのヘッダーフィールドは、応答メッセージにのみ適用できます。
Entity-header: これらのヘッダーフィールドは、エンティティ本体に関するメタ情報、または本体が存在しない場合はリクエストによって識別されたリソースに関するメタ情報を定義します。
上記のすべてのヘッダーは同じ一般的な形式に従い、各ヘッダーフィールドは名前とそれに続くコロン(:)およびフィールド値は次のとおりです。
message-header = field-name ":" [ field-value ]
さまざまなヘッダーフィールドの例を次に示します。
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1568eb00"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: text/plain
メッセージ本文
メッセージ本文部分はHTTPメッセージではオプションですが、使用可能な場合は、要求または応答に関連付けられたエンティティ本体を運ぶために使用されます。エンティティ本体が関連付けられている場合、通常はContent-Type そして Content-Length ヘッダー行は、関連付けられた本文の性質を指定します。
メッセージ本文は、実際のHTTP要求データ(フォームデータやアップロードなどを含む)とサーバーからのHTTP応答データ(ファイル、画像などを含む)を運ぶものです。以下に示すのは、メッセージ本文の単純な内容です。
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
次の2つの章では、上記で説明した概念を使用して、HTTP要求とHTTP応答を準備します。