telnetでHTTPの通信を覗いてみる
参考にした記事
- 「HTTPリクエスト」と「HTTPレスポンス」 | ITSakura
- HTTP の概要 - HTTP | MDN
- ChromeデべロッパーツールでPOSTされたパラメータの中身を確認する
- リクエストとレスポンスの仕組み
HTTPの流れ
ChromeやFirefoxなどのブラウザが裏側でやっていること。
参照元: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リクエスト
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