HTTPとは

HTTP(Hyper Text Transfer Protocol)とは、ハイパーテキスト、すなわちWebサイトを構成するWebページ(HTMLファイル)を転送するためのプロトコルです。しかし、HTTPはハイパーテキストを転送するためだけに利用しているわけではありません。ハイパーテキストに限らず、さまざまな種類のファイルを転送する汎用的なファイル転送プロトコルとして利用できます。たとえば、HTTPを利用して、JPEGファイル、PNGファイルなどの画像ファイルはもちろんのこと、PDFファイルやWORDファイル、EXCELファイルなどの文書ファイルの転送も可能です。

HTTPはTCP/IPの最上位のアプリケーション層に位置するプロトコルで、下位のトランスポート層にはTCPを利用します。ウェルノウンポート番号は80です。HTTPによるファイル転送はHTTPリクエストとHTTPレスポンスのやり取りによって行います。

 HTTPによるファイル転送の概要
図 HTTPによるファイル転送の概要

HTTPリクエスト

WebブラウザからWebサーバアプリケーションへ送信されるHTTPリクエストは、リクエスト行、メッセージヘッダ、エンティティボディの3つの部分に分けられます。メッセージヘッダとエンティティボディの間には空白行があります。

 HTTPリクエストのフォーマット
図 HTTPリクエストのフォーマット

リクエスト行はHTTPリクエストの1行目で、Webサーバに対する実際の処理要求を伝えます。リクエスト行は、さらにメソッド、URI、バージョンで構成されています。メソッドは、サーバに対する要求を表していて、主なメソッドを表にまとめています。

表 主なHTTPメソッド
メソッド名 意味
GET URIで指定したデータを取得します
HEAD URIで指定したデータのヘッダのみを取得します
POST サーバに対してデータを送信します
PUT サーバにファイルを送信します
DELETE サーバのファイルを削除するように要求します
CONNECT プロキシサーバ経由で通信を行います

最もよく用いられるメソッドはGETです。WebブラウザでURLを入力したり、リンクをクリックしたりするとGETメソッドのHTTPリクエストをWebサーバアプリケーションへ送信します。URIはリクエストの対象となるデータを示しています。バージョンは、WebブラウザがサポートするHTTPのバージョンで主に1.0か1.1です。

メッセージヘッダはリクエスト行に続く複数行のテキスト列です。ここでは、Webブラウザの種類やバージョン、対応するデータ形式などの情報を記述しています。

メッセージヘッダのあとは区切りのための空白行があり、そのあとにエンティティボディが続きます。POSTメソッドでWebブラウザからデータを送るときに用いられます。

HTTPリクエストのうちGETメソッドの例は以下の図のようになります。

GETメソッドの例
図 GETメソッドの例

リクエスト行にはGETメソッドで「network_basic」というURIにHTTPバージョン1.1でアクセスしていることがわかります。そして、GETメソッドの場合はメッセージヘッダの部分には、User-AgentとしてPCのOSやブラウザのバージョンなどの情報も含まれます。Referrerにはアクセス元のページの情報が入っています。また、GETメソッドのエンティティボディには何も入っていません。

HTTPレスポンス

HTTPリクエストの返事がHTTPレスポンスです。HTTPレスポンスは、HTTPリクエストと似た構成でレスポンス行、メッセージヘッダとエンティティボディから構成されています。

HTTPレスポンスのフォーマット
図 HTTPレスポンスのフォーマット

レスポンス行は、さらにバージョン、ステータスコード、説明文に分かれています。バージョンは、リクエストと同じくHTTPのバージョンを示し、現在主なバージョンは1.0か1.1です。ステータスコードはリクエストに対するWebサーバアプリケーションの処理結果を表す3桁の数字です。ステータスコードには、多くの種類があり、以下の表のように百の位で大まかな意味が決まっています。

表 主なHTTPステータスコード
ステータスコードの値 意味
1xx 情報。追加情報があることを伝えます
2xx 成功。サーバがリクエストを処理できたことを伝えます
3xx リダイレクト。別のURIにリクエストしなおすように要求します
4xx クライアントエラー。リクエストに問題があり、処理できなかったことを伝えます
5xx サーバエラー。サーバ側に問題があり、処理できなかったことを伝えます

説明文とは、ステータスコードの意味を簡単に示したテキストです。Webサーバアプリケーションが返すステータスコードで一番多いのは「200」です。ステータスコード200はリクエストを正常に処理できたということを表しています。しかし、リクエストが正常に処理されればWebブラウザにはリクエストした内容が表示されるので、ステータスコード200をユーザが目にすることはほとんどありません。

Webブラウザを利用しているユーザが誰でも一度は目にしたことがあるステータスコードは、おそらく「404」です。URLを間違えてえしまったりWebページが削除されていると、Webサーバはステータスコード404を返します。ステータスコード404を受け取るとWebブラウザでは「ページが見つかりません」といった表示になります。

URLを間違えたり、Webページが削除されているときにどのような表示になるかはWebサーバアプリケーション側の設定によって決まります。

また、オンラインショッピングサイトで大規模なセールを開催するときなどにアクセスが急増すると、Webサーバアプリケーションが処理しきれないこともあります。そのような場合、Webサーバアプリケーションはステータスコード「503」などを返します。

メッセージヘッダは、Webサーバアプリケーションがより詳細な情報をWebブラウザに伝えるために利用します。たとえば、データの形式や更新された日付などが記述されます。

そのあとに区切りの空白行があり、空白行のあとにエンティティボディが続きます。エンティティボディにWebブラウザに返信すべきデータが入ります。

以下は、HTTPレスポンスの例として、Webサーバアプリケーションが一番よく返すステータスコード200とその内容を挙げています。

HTTPレスポンスの例
図 HTTPレスポンスの例

このHTTPレスポンスは、「//www.n-study.com/network_basic」というURLにアクセスしたときのものです。スタータス行でHTTP1.1でのアクセスを正常に処理ができていることスタータスコード200でWebブラウザに通知しています。メッセージヘッダには //www.n-study.com/network_basic/ のHTMLファイルの更新日時やファイルの種類、対応している文字コードなどの情報が入っています。そして、エンティティボディの部分には、HTMLファイルの中身がそのまま含まれていることがわかります。

TCP/IP