【Wireshark】HTTPの中身をみる

Wireshark を使って HTTPリクエスト/レスポンス の中身を確認してみます。

HTTPリクエスト

Chrome や Firefox などの Web ブラウザや curl コマンドといった HTTP クライアントから google.com にリクエストを投げます。一部加工していますが Wireshark で tcp.port == 80 でフィルタリングすると以下のように確認できます。パケットを選択し 右クリック -> copy -> byte で HEX をコピーできます。

GET / HTTP/1.1
Host: google.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8??Accept-Language: ja,en-us;q=0.7,en;q=0.3
Connection: keep-alive
/r/n

GET メソッドの場合は リクエストライン + HTTPヘッダ で構成されます。 POST メソッドの場合は CRLF(/r/n) の後にさらにエンティティボディが追加されます。

GET / HTTP/1.1 # リクエストライン
Host: google.com # ホスト名
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Connection: keep-alive # TCP接続の維持 (HTTP 1.1)
/r/n # 終了 CRLF

HTTPレスポンス

レスポンスは ステータスライン + HTTPヘッダ で構成されます。

HTTP/1.1 200 OK # ステータスライン
Pragma: no-cache
Cache-Control: no-cache
Content-Type: text/plain # MIME
Date: Sat, 30 Nov 2013 04:32:40 GMT # タイムスタンプ
Content-Length: 15 # コンテンツの長さ
Connection: keep-alive # TCP接続の維持 (HTTP 1.1)
/r/n # 終了 (CRLF)

/r/n の後に エンティティボディ が付加されます。

おわりに

エンティティボディという言葉ですが, メッセージボディと何が違うのか気になり RFC2126 をみてみると安全に通信するために Transfer-Encoding された場合にはメッセージボディと呼ばれるみたいです。メッセージという概念はエンティティというデータの集合という概念より人間中心的な意味合いがあるように思います。