連載
» 2015年11月27日 05時00分 UPDATE

リトライ! 触って学ぶTCP/IP(3):「HTTP」の仕組みをおさらいしよう(その2) (1/3)

ネットワークの基礎を支えるTCP/IPを基本から学び直す本連載。第3回では、前回に引き続き、HTTP通信の仕組みをおさらいします。前回は「HTTPリクエスト」について学びましたので、今回はWebサーバーがクライアントに返送する「HTTPレスポンス」について解説します。

[福永勇二,インタラクティブリサーチ]
「リトライ! 触って学ぶTCP/IP」のインデックス

連載目次

 前回は、HTTP通信において、クライアントからWebサーバーに送信する「HTTPリクエスト」について学習しました。今回は引き続き、Webサーバーがクライアントに返送する「HTTPレスポンス」の内容について見ていきましょう。

HTTPレスポンスの中身

 ブラウザーなどからWebサーバーにリクエストを送ると、Webサーバーは受け取ったリクエストを処理して、その結果を「レスポンス」として返します。例えば、「HTMLファイル『sample.html』を取得せよ」という内容のリクエスト(GETメソッド使用)であれば、指定された「sample.html」の中身がレスポンスとしてブラウザーに送り返されてきます。

 このレスポンスについても、前回学んだリクエストと同様に、その形式がきっちりと定められています(図1)。

図1 HTTPレスポンスの構成

 1行目のステータス行には、リクエスト処理の結果が示されます。2行目からは、実行結果に関する細かい情報や、補足的な情報を示すヘッダーフィールドが続きます。その後に1行の空行を置いて、リクエストしたファイルなどの内容が収められるメッセージ本体がきます。

 この構成、どこかで見たことありませんか? そう、リクエストの形式にそっくりですね。リクエストとレスポンスは、よく似た形となるように定められているのです。

 ちなみに、ステータス行から空行までは、人間が読める通常の文字が使われます。一方メッセージ本体は、文字以外に、画像や音声など、「バイナリデータ」と呼ばれる形式のデータも含めることができます。

ステータス行の構造

 HTTPレスポンスの各部分を、少し詳しく見てみましょう。まずは1行目のステータス行です。ステータス行には、リクエストに基づいてサーバーが行った処理について、結果が示されます。ステータス行の中身は、スペースを区切りとして、三つの部分に分かれています。

図2 ステータス行の構成とステータスコードの大分類

 最初の部分は、レスポンスがHTTPのどのバージョンに従ったものかを表します。通常は、「HTTP/1.1」が用いられます。

 二つ目の部分はステータスコードです。3桁の数字を使って、サーバーがリクエストの処理を試みた結果を示します。多くの場合、レスポンスに含まれる情報の中で、このコードが最も重要な意味を持つことになります。ステータスコードは、先頭の1桁によって、その意味が大きく五つに分類されます(図2)。

 三つ目の部分は、ステータスコードが示す内容を、人間が読んで分かるフレーズで表したものです。この部分の表現形式は厳密には定められていませんので、ブラウザーなどのプログラムでリクエストの結果を判定するときには、通常、二つ目のステータスコードを用います。

ステータスコードの種類と意味

 3桁の数字を使用するステータスコードは、それぞれのコードに対して個別の意味が割り当てられています。冒頭の1桁が大分類を表すことは前述の通りです。

 例えば、ステータスコード「404」は、リクエストに指定した対象のファイルなどが見つからなかった時に返されます。Webページの取得に失敗したときなどに、ブラウザー上に「Not Found」の文字とともにこのコードが表示されるのを見たことがある人も多いでしょう。

 ステータスコードの一覧を図3に示します。一見非常に多くの種類があるように見えますが、慌てないでください。これらの中には、特定のヘッダーをリクエストで使用したときだけ返されるような使用頻度の少ないものも含まれています。よく使われるものを太字で表してみましたので、以下で解説します。

図3 レスポンスに含まれるステータスコードの意味

 「200」はリクエストが正常に処理されたことを表します。GETメソッドを含むリクエストなら、メッセージ本体に指定したファイルの中身がレスポンスに格納されているでしょう。「401」はリクエストの実行に認証(通常はIDとパスワードの指定)が必要であることを知らせるコードです。「404」は前述の通り、対象のファイルなどが見つからないことを表します。「408」は所定の時間内にリクエストが完結しなかった場合に通知されます。そして「500」は、処理の途中でサーバー内部にエラーが発生したことを表しています。

       1|2|3 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。