MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

典型的な HTTP セッション

HTTP のようなクライアントサーバープロトコルでは、セッションが 3 つの段階で構成されます:

  1. クライアントは TCP コネクション (トランスポート層が TCP ではない場合は、他の適切なコネクション) を確立します。
  2. クライアントはリクエストを送り、回答を待ちます。
  3. サーバはリクエストを処理して、ステータスコードや適切なデータを提供する回答を返信します。

HTTP/1.1 では第 3 段階の後にコネクションは閉じられなくなり、クライアントはさらにリクエストを発行することができます。つまり、第 2 段階と第 3 段階を複数回行うことができます。

コネクションを確立する

クライアントサーバープロトコルでは、クライアントがコネクションを確立します。HTTP のコネクションを開くとは、下層のトランスポート層のコネクションを確立することであり、これは通常 TCP です。。

コンピューター上の HTTP サーバー用の、TCP の既定のポートは 80 番です。8000 番や 8080 番など、ほかのポートを使用することもできます。読み込むページの URL はドメイン名とポート番号の両方を含みますが、後者は 80 番である場合に省略できます。詳しくは Identifying resources on the Web をご覧ください。

注意: クライアントサーバーモデルでは、クライアントの明示的なリクエストなしにサーバーがデータをクライアントに送信することが認められません。この問題を回避するために、ウェブ開発者が使用する技術がいくつかありますXMLHTTPRequest を使用してサーバーへ定期的に ping を送る、Fetch API、HTML WebSockets API を使用する、あるいは同様のプロトコルを使用するなどです。

クライアントのリクエストを送信する

コネクションを確立すると、ユーザーエージェントはリクエストを送信できます (ユーザーエージェントは一般的にウェブブラウザですが、ほかにもクローラーなどがあります)。クライアントのリクエストは CRLF (キャリッジリターンの後にラインフィード) で区切られたテキストのディレクティブで構成され、3 つのブロックに分けられます:

  1. 最初の行は、リクエストメソッドの後に以下のパラメーターがあります:
    • ドキュメントのパス、すなわち絶対 URL からプロトコル名とドメイン名を除いたものです。
    • HTTP プロトコルのバージョン。
  2. 後続の行は HTTP ヘッダーであり、サーバーに対してどの種類 (例えば、言語や MIME タイプ) のデータが適切かを示す情報や、サーバーの動作を変える (例えば、すでにキャッシュされている場合は回答を送信しない) データを与えます。これらの HTTP ヘッダーは空行で終わるブロックを構成します。
  3. 最後のブロックは省略可能なデータブロックで、主に POST メソッドで使用される追加のデータを含みます。

リクエストの例

developer.mozilla.org のルートページ、すなわち http://developer.mozilla.org/ を読み込む、また可能であればユーザーエージェントはフランス語のページを希望することをサーバに伝えます:

GET / HTTP/1.1
Host: developer.mozilla.org
Accept-Language: fr
 

ヘッダーブロックとデータブロックを分けている、最後の空行に注意してください。この例は HTTP ヘッダーに Content-Length がありませんので、空のデータブロックが与えられてヘッダーの終わりを示しており、サーバーはこの空行を受け取るとただちにリクエストを処理できます。

例えば、フォームの入力結果を送信します:

POST /contact_form.php HTTP/1.1
Host: developer.mozilla.org
Content-Length: 64
Content-Type: application/x-www-form-urlencoded

name=Joe%20User&request=Send%20me%20one%20of%20your%20catalogue

リクエストメソッド

HTTP では、リソースに対して実行したいアクションを示す リクエストメソッド のセットを定義しています。リクエストメソッドは名詞も存在しますが、HTTP 動詞と言われることがあります。もっとも一般的なリクエストは、GETPOST です:

  • GET メソッドは、指定したリソースのデータを要求します。GET を使用するリクエストは、データの取り込みに限ります。
  • POST メソッドはサーバーにデータを送信しますので、データの状態を変更できます。これは、HTML フォーム 用によく使用されるメソッドです。

サーバーレスポンスの構造

接続したエージェントがリクエストを送信すると、ウェブサーバーはそのリクエストを処理して、最終的にレスポンスを返信します。クライアントのリクエストと同様にサーバーのレスポンスはテキストのディレクティブで構成され、それらは CRLF で区切られており、3 つのブロックに分けられます:

  1. 最初の行はステータス行で、受け入れた HTTP バージョンとステータス要求で構成されます (そして、人間に読めるテキストで意味を簡単に示します)。
  2. 後続の行はそれぞれ具体的な HTTP ヘッダーを表しており、クライアントに対して送信したデータに関する情報 (例えば種類、サイズ、圧縮方法、キャッシュ情報) を与えます。クライアントのリクエストの HTTP ヘッダーブロックと同様に、これらの HTTP ヘッダーも空行で終わるブロックを構成します。
  3. 最後のブロックはデータブロックで、任意のデータを含みます。

レスポンスの例

成功したウェブページのレスポンスです:

HTTP/1.1 200 OK
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html

<!DOCTYPE html... (ここにサイズが 29769 バイトの、要求されたウェブページが置かれます)

要求されたリソースが永続的に移動されたことの通知:

HTTP/1.1 301 Moved Permanently
Server: Apache/2.2.3 (Red Hat)
Content-Type: text/html; charset=iso-8859-1
Date: Sat, 09 Oct 2010 14:30:24 GMT
Location: https://developer.mozilla.org/ (これはリソースの新しいリンクです。ユーザーエージェントはこちらを読み込むでしょう)
Keep-Alive: timeout=15, max=98
Accept-Ranges: bytes
Via: Moz-Cache-zlb05
Connection: Keep-Alive
X-Cache-Info: caching
X-Cache-Info: caching
Content-Length: 325 (ユーザーエージェントがリンクをたどれない場合に表示する、既定のページを含むコンテンツです)

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="https://developer.mozilla.org/">here</a>.</p>
<hr>
<address>Apache/2.2.3 (Red Hat) Server at developer.mozilla.org Port 80</address>
</body></html>

要求されたリソースが存在しないことの通知:

HTTP/1.1 404 Not Found
Date: Sat, 09 Oct 2010 14:33:02 GMT
Server: Apache
Last-Modified: Tue, 01 May 2007 14:24:39 GMT
ETag: "499fd34e-29ec-42f695ca96761;48fe7523cfcc1"
Accept-Ranges: bytes
Content-Length: 10732
Content-Type: text/html

<!DOCTYPE html... (欠けているリソースをユーザが見つけることを支援する、サイト毎にカスタマイズされたページを含みます)

レスポンスステータスコード

HTTP レスポンスステータスコード は、特定の HTTP リクエストが正常に完了したかを示します。レスポンスは情報レスポンス、成功レスポンス、リダイレクション、クライアントエラー、サーバーエラーの 5 つのクラスに分類されます。

  • 200: OK。リクエストは成功しました。
  • 301: Moved Permanently。このレスポンスコードは、要求したリソースの URI が変更されたことを表します。
  • 404: Not Found。サーバーは、要求されたリソースを見つけることができません。

関連情報

ドキュメントのタグと貢献者

タグ: 
 このページの貢献者: yyss
 最終更新者: yyss,