【Wireshark】HTTPの中身をみる

| 0件のコメント

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

HTTPリクエスト

Webブラウザや curl コマンドなどの HTTPクライアント から google.com にアクセスします。tcp.port == 80 でフィルタリングします。

一部加工していますが Wireshark で以下のように確認できます。パケットを選択し 右クリック -> 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された場合には メッセージボディ と呼ばれるみたいです。メッセージという概念がよりエンティティというデータの集合という概念より人間中心的な意味合いがあるから区別したのでしょうか。