telnetでHTTPの通信を覗いてみる

参考にした記事

HTTPの流れ

ChromeFirefoxなどのブラウザが裏側でやっていること。
参照元HTTP の概要 - HTTP | MDN

telnet hogefuga.com 80

まず、↑のようにして、hogefuga.comに接続する。

GETの場合

Webページなどの情報を取得するとき。

HTTPリクエス

1.リクエスト行:欲しいページをリクエスト。
GET /sample.html HTTP/1.1
2.ヘッダー(追加情報)
Host: hogefuga.com
Accept-Language: fr

※Hostがないと、Bad Requestとなる場合がある。
バーチャルホスト(同一IPで複数のドメイン名に対応する)を利用しているサーバーがあるので。 参考:TelnetでApacheにGETを送信したところ、HTTP/1.0だと成功し、HTT… - 人力検索はてな

HTTPレスポンス

1.ステータス行:リクエストが成功したか否か。
HTTP/1.1 200 OK
2.ヘッダー(追加情報)
Date: Sat, 09 Oct 2010 14:28:02 GMT
Server: Apache
Last-Modified: Tue, 01 Dec 2009 20:18:22 GMT
ETag: "51142bc1-7449-479b075b2891b"
Accept-Ranges: bytes
Content-Length: 29769
Content-Type: text/html
3.ボディ(取得情報)
<!DOCTYPE html... (ここに、Content-Length に指定してリクエストした「29769 バイト」のWebページがある)

POSTの場合

formなどで情報を送信するとき。

HTTPリクエス

参考:POST - HTTP | MDN

1.リクエスト行(GETと同じ)
POST /sample.html HTTP/1.1
Host: hogefuga.com
2.ヘッダー(追加情報)
Content-Length: 数値でパラメータの長さ
Content-Type: ボディをどんなフォーマットで送信するか
3.ボディ(送信内容)
「formタグのname属性=値」&・・・
name=Taro&age=15

SSL通信を覗く方法

opensslを使う。
参考:HTTP(S)サイトをTelnetでページ表示。SSLでも大丈夫 - それマグで!
openssl s_client -connect サーバーアドレス:443