2008/04/10

httpを体感してみる [ http ]

最近はhttp周りの話が多いんですが、意外にWEB上に存在している
リソースを閲覧する時、一体どうやってリソースにアクセスしてどのように
データを取得しているかを知らない人って多いと思います。

例えば、Yahooを見たいと思った!その時どうする!
恐らくみなさん、こうするでしょう。






ぽちっとな。

アドレス欄にYahooのアドレスを入力して、華麗にエンターキーを叩く!
(実際にはブックマークを使う事が多いとは思いますが、同じ事ですね)


そうすると見事ブラウザにはYahooのトップページが表示される訳ですが……
果たして、この時裏で何が行われているのでしょう??

……というあたりを、今日はWindows付属のコマンドプロンプトを使って
試してみようと思います。

※:以下のような検証は自分が管理するサーバ以外には行わないで下さい。
後で何か起きても当Blogは責任を取れません。

さて、まずはコマンドプロンプトを起動します。
スタート→ファイル名を指定して実行 から"cmd"と入力すればいけますね。

ここでコマンドプロンプトに"telnet"と入力してEnterを押します。
(※:本来確かリモートの為に使われてたプロトコルだったはず。
   暗号化とかしてないから今は使ってない気がするんだけど……)
するとコマンドラインが Microsoft Telnet> のように変化します。
これでTelnetを使う準備は完了です。

さて、ここでTelnetのコンソールは一度置いておいて、ブラウザに戻ります。
そして
http://gp400.no-ip.info/~D400/test/http_test.html
上記アドレスにアクセスしてみましょう。









こんな感じでごくごく簡単なhtmlが表示されたと思います。
さ、ここでさきほどのTelnetのコンソールに戻って、今htmlを
表示した事を再現してみたいと思います。まずは

set localecho
と入力してエンター。(Windows2000だとlocal_echoかも)
これで入力している文字が見えるようになります。
さて、ここからが本番、まずはアクセス先のサイトへの接続を確保します。

open gp400.no-ip.info 80

上記のように入力してエンター。これで gp400.no-ip.info というドメインを
オープンしてくれ! という命令を出している事になります。
エラーも出なかったら、続けて以下のように入力します。

GET /~D400/test/http_test.html HTTP/1.1
Host: gp400.no-ip.info

↑ここのミソは、Hostを入力し終わった後にもう一度Enterを押す所です。
すると、このような画面が返ってきます。


















ここで返ってきた文字列は、まさにさっきブラウザで開いたhtmlのソースと
同じ物です。これがリソースに対してGETメソッドを実行した事になる訳です。


はい、という訳で今日はサーバに対してhttpヘッダをブラウザの代わりに
自分で作成して(正確にはブラウザは今回書いた以上の情報を自動で
補完してhttpヘッダに付加しますが)リソースに対してGETメソッドを
実行してみました。

今までなんとなくリクエストリクエスト言ってたような人は少しブラウザが
何をやっているか体感できたんじゃないでしょか?同じようにパラメータを
POSTするのもこういった感じで逐一検証する事が可能です。
昨日のエントリと合わせて色々試してみたいところですね~~。

2 件のコメント:

maito さんのコメント...

こういったことって研修とかでやらないし、いざ仕事の場合でも、意識しないから、読んでいてなるほどーと思いました。

きちんとプロトコルから理解したいところだね。

ふぉー さんのコメント...

なんか、Web系システム扱っている
会社なら新人社員研修でこれやって
みてもいいんじゃないかな
(勿論社内のローカルサーバ相手に)
って思ったんだけど、少なくとも
某N社でそれやったら大混乱だろね……

でも、ある程度GETだのPOSTだの使える
ようになった段階でこういうのをやって
おくと理解がちったぁ深まるかなと
思う訳です……

ちなみに、これhttpだけじゃなくてftpとか
別のプロトコルでも一応実践できた気がした。

何にせよ、一体どうやってクライアントと
サーバの間でデータのやり取りが行われているかを
理解するのって、セキュアな観点から
見ても大事だよね。