HTTPの簡単な仕組みについて、前回の記事で学びました。 今回はHTTP通信の中身をもう少し詳しく見ていきます。主にメッセージヘッダとメッセージボディがメインとなり、クライアントもサーバーも同じ形式でデータを送り合います。

HTTP通信の中身

3年以上前に更新されました。情報が古い可能性があります。
更新日 : 2019年03月15日

HTTPの簡単な仕組みについて、前回の記事で学びました。
今回はHTTP通信の中身をもう少し詳しく見ていきます。主にメッセージヘッダとメッセージボディがメインとなり、クライアントもサーバーも同じ形式でデータを送り合います。

HTTP通信の中身

HTTP通信は、クライアントもサーバーも以下のような形式でデータのやり取りを行います。

HTTPヘッダー
(空行)
HTTPボディ

このようにやり取りされます。

BeCrazyのトップページを例に見てみましょう。

リクエスト

まずはリクエストから見ていきます。HTTPヘッダーは以下のようになっています。

GET / HTTP/1.1
Host: it.becrazy.jp
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: ja,en-US;q=0.9,en;q=0.8

1行目にはHTTPで「どのように」データを取得するかを示すGETが書かれています。さらに/がアクセスしたい「何を」を示す部分です。1行目の最後にはHTTPのバージョンが記載されています。今回はバージョン1.1です。

2行目にはHost: it.becrazy.jpとなっていますね。これがアクセスする先のサーバー情報です。

その他たくさんの情報がありますが、主に表示言語やクライアントの使っているブラウザバージョンなどです。ヘッダー情報は様々なものがあるため、改めて記事にします。

GETメソッドでクライアントがリクエストする場合にはHTTPボディはありません。サーバーから情報が届く際には、表示するべき内容がボディに記載してあります。

レスポンス

ではレスポンス(サーバーからの応答)を見てみましょう。まずはヘッダーから。

HTTP/1.1 200 200
Date: Thu, 07 Mar 2019 07:15:47 GMT
Server: Apache
Content-Type: text/html;charset=UTF-8
Content-Language: ja
Accept-Ranges: none
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked

1行目には再度バージョン情報が記載され、200と書いてあります。

これはレスポンスステータスコードと言って、200番台であれば正常な応答ということになります。その他のステータスコードとして、300番台はリダイレクト(他のサーバーにリクエストを変更する)、400番台はユーザー側が間違えている旨を示すエラー、500番台がサーバー側にエラーがある場合に利用されます。

その他ヘッダー情報も様々ありますが、当記事では割愛します。

続いてレスポンスボディですが、ここには表示されるべきHTMLが基本的には入っています。要はユーザーに表示させたいデータ本体です。

まとめ

HTTP通信の中身を簡単に見ていきました。

HTTPヘッダー部分とボディ部分は単純な空白行で区切られていて、ヘッダー部分には通信するために必要な情報、ボディ部分に伝えたいデータ本体を載せてやり取りを行います。