HTTPプロトコル

HTTPプロトコルとは

HTTPは通信に関する取り決めの一つで、Webサーバクライアント(ブラウザ)の間でやり取りを行うためのプロトコルです。テキストファイル、画像ファイル、その他複合ファイルをシンプルかつ効率的にクライアントに配布することを実現しています。

HTTPリクエストとHTTPレスポンス

Webサーバーとクライアント間で通信を行う時に、クライアントからWebサーバーに対して、HTTPリクエストが送られ、Webサーバーからクライアントに対してHTTPレスポンスが送られます。HTTPリクエストには「htmlファイルを読み込みたい」などの要求メッセージが記述され、HTTPレスポンスにはその要求に対しての結果が記述されます。その記述内容について、調べたのでその覚え書きです。

HTTPリクエスト

GET /index.html HTTP/1.1
Host: http://localhost:54321
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) 
Accept: text/html,image/jpeg
Accept-Language: ja,en-us;
Accept-Encoding: gzip
Cookie: ***************
Connection: keep alive
Cache-Control: max-age=0

まず、1行目はリクエスト行と呼ばれ【メソッド パス名 HTTP/バージョン】の順番に記述されます。”GET”は代表的なメソッドの一つで、サーバに対してページの要求を行います。その他に”HEAD”(ヘッダの情報のみを要求),”POST”(データをURLに表示せずに、ページを要求)などがあります。”GET”と”HEAD”は必ずサポートする必要があります。パス名なURLに記述した場合は/index.htmlのように表示されますが、URLに記述しない場合でも/index.htmlを要求するようになっています。HTTPのバージョンは現在ほとんどが1.1となっています。

2行目のHostヘッダーはクライアントがリクエストするサーバを特定するために記述します。HTTP/1.1ではプロキシや仮想サーバー利用を前提のため、必ず記述する必要があります。

3行目のUser-Agentヘッダーは取得したリソスなどを記述するブラウザやシステムの情報を記述します。

4行目のAcceptヘッダーはWebブラウザが受理できるデータの形式を記述しています。こちらはMIMEと呼ばれるプロトコルで、データの形式をタイプ/サブタイプのように記述する。

5行目のAccept-LanguageはWebブラウザが受理できる言語を記述します。日本語ならja、英語ならen、米語ならen-usです。ブラウザの設定で言語の優先順序を変更することができます。

6行目のAccept-Encodingは利用可能なエンコード方式です。Content Coding方式で記述されます。gzipと記述することで、圧縮転送が可能になります。

7行目のCookieはクッキーに関する情報が記述されます。重要な項目であるようなので別記する予定です。

8行目のConnectionはHTTP/1.1ではすべてkeep aliveに設定されるようで、あまり気にする必要はなさそうです。コンテンツのダウンロードを連続かすることでサーバの負担を軽減させる働きがあるようです。

9行目のCatch-Controlはディレクティブと呼ばれるコマンドをフィールド値に設定することで、キャッシング動作を指定します。max-ageは必ず記述する必要があり、0の場合、キャッシュサーバは常にリクエストをオリジンサーバに渡します。指定されたAge値よりも小さい場合キャッシュされたリソースを受け取ることができます。

HTTPレスポンス


HTTP/1.1 200 ok
Server: Microsoft Internet Server / 4.0
Data: Sat 12 Jun 2014 11:43:11 GMT
Content-type: text/html
Content-length: 300
-空白行-

BODY

1行目はレスポンス行と呼ばれ、【HTTPバージョン ステータス番号 補足メッセージ】の順に記述されます。HTTPのバージョンはHTTPリクエストとそろえる必要があります。代表的なステータス番号と補足メッセージを下図にまとめます。

ステータス番号 補足メッセージ 説明
200 OK 成功しました。
400 Bad Request 要求が不正です。
404 Not Found ページが見つかりません。

 

2行目のServerヘッダーには、サーバーの情報が記述されています。今回のようにWindows PCを使ってローカルホストに接続する場合は、ベンダー名/バージョン番号の順にMicrosoft Internet Server / 4.0のように記述します。

3行目のDateにはGMT(グリニッジ標準時)で応答を返す時刻を記述します。

4行目のContent-typeではコンテンツの種別をMIMEタイプで示します。

5行目のContent-lengthはメッセージボディの長さをバイト単位で示します。

text/htmlの情報を送るために、IE8とCromeに応答を返す場合では、最低でも上述の5行分の情報とBodyであるhtmlファイルの情報が必要でした。これら以外にも表示する情報に応じて必要な情報を記述する必要があると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>