HTTP クライアントを作ってみよう(1)

前へ << クライアントを作るにあたっての注意点 HTTP クライアントを作ってみよう(2) >> 次へ

まずはtelnetで

さっそくクライアントを作ってもいいのですが、その前に telnet を使って web を閲覧してみましょう。 UNIX なら telnet は標準で用意されています。Windows なら telnet.exe を 実行すればいいのですが、いくつか 注意点 があるので 事前に読んでください。
% telnet hostname port
という書式でホスト名とポート番号を指定することができます。 つまり telnet は簡易クライアントにもなるのです。 ここでは http://www.cs.gunma-u.ac.jp/index.html をダウンロードしてみましょう。 Bold で書かれた部分を実際にタイプしてください。
% telnet www.cs.gunma-u.ac.jp 80
Trying 133.8.2.7...
Connected to www.cs.gunma-u.ac.jp.
Escape character is '^]'.
GET /index.html HTTP/1.0(リターン)
(続けてリターン)
出力された内容と、 http://www.cs.gunma-u.ac.jp/index.html をブラウザで見て 「ソースを表示」したものと見比べてみてください。 同じ内容になっていますね? でもよく見てみると先頭部分が違います。
HTTP/1.1 200 OK
Date: Fri, 19 Jun 1998 20:38:48 GMT
Server: Apache/1.2.6
Last-modified: Wed, 04 Mar 1998 06:40:21 GMT
Etag: "2d-794-34fcf755"
Content-length: 1940
Accept-ranges: bytes
Connection: close
Content-type: text/html

<!-- $Id: http-1.html,v 1.2 2004/06/12 05:28:18 68user Exp $ -->
<HTML>
<TITLE>Home Page of Department of Computer Science, Gunma University</TITLE>

<BODY BACKGROUND="/icons/BackGround/welcomeBack.gif">

<CENTER>
(以下略)
先頭部分は、あまりなじみのない「HTTP/1.1 200 OK」とか 「Server: Apache/1.2.6」などの記述があります。 そして空行をはさんで HTML 文が書かれています。 空行より前の部分をヘッダ、空行より後の部分をボディ と言います。

普通、ブラウザの「ソースを表示」などの機能で見られるのは ボディだけですね。

HTTPプロトコル

www.cs.gunma-u.ac.jp のポート 80 への接続処理は telnet が勝手にやってくれます。 その後の
GET /index.html HTTP/1.0(リターン)
(リターン)
というのが HTTP プロトコルです。
HTTP は Hyper Text Transfer Protocol の略なので、「HTTP プロトコル」 という言葉はちょっとおかしいのですが、まあ勘弁して下さい。
「GET」のことをメソッドといいます。わかりやすく言うと「命令」でしょうか。 GET メソッドは、ファイルの内容を送信してほしいという意味です。
後に説明しますが、GET メソッドの他に、HEAD や POST というメソッドがあります。
「/index.html」で送ってほしいパスを指定します。この後に「?....」という 文字列を渡すことができます。例えば CGI に対して 「/~user/sample.cgi?data1=hoge&data2=fuga」という引数を 渡したい場合は、
GET /~user/sample.cgi?data1=hoge&data2=fuga HTTP/1.0
とします。

「HTTP/1.0」というのは HTTP プロトコルのバージョン 1.0 であることを意味します。 他にも HTTP/0.9・HTTP/1.1 があります。HTTP/0.9 は、HTTP プロトコルの テストバージョンのようなもので、現在はあえて使う必要はないでしょう。 HTTP/1.1 は使い込むと結構面白いので、後からとりあげます。

最後に「リクエストがここで終了ですよ」ということを示すために、 改行のみの行を送ります。

例えば http://www.foo.com/fuga/hoge.html を取得したい場合は、

% telnet www.foo.com 80
Trying 123.234.210.10...
Connected to www.foo.com
Escape character is '^]'.
GET /fuga/hoge.html HTTP/1.0(リターン)
(続けてリターン)
とするわけです。
前へ << クライアントを作るにあたっての注意点 HTTP クライアントを作ってみよう(2) >> 次へ

ご意見・ご指摘は Twitter: @68user までお願いします。