telnetで遊ぶ::telnetでHTTP

いま,ブラウザを使ってこのページを表示していると思いますが, telnetでもHTMLを読むことができます(もちろん,タグは認識しないので色等はありませんが…).

アクセスしてみる

では,ためしにK-Kのページのトップページをtelnetで取得してみましょう.

>{{kbd|telnet www.chichibu.ne.jp 80}}[enter]

コマンドプロンプト上で上のように入力してくみてださい. www.chichibu.ne.jpというのが,接続したいサーバで, 後の80というのがポート番号です. サーバのコンピュータでは色々なサーバが同時に動いていることが多いのですが, 提供するサービスによって番号が決められています. HTTPは普通は80番です.サーバの管理者はポート番号を自由に設定できますが, 変な番号にするとアクセスする人が困るので普通は固定です.

{{kbd|GET /~kawahira/index.html HTTP/1.0}}[enter]
{{kbd|Host: www.chichibu.ne.jp}}[enter]
[enter]

上のように入力するとページの内容が表示されると思います. 気をつけないといけないのは,バックスペースは使えないと思います. あと,最後は2回連続でエンターキーをたたいてください. telnetの設定のローカルエコーが有効になっていないと, 自分で入力した文字は表示されません. 子の場合はHost:の行はいらないかもしれません.これは後で説明します.

HTTPプロトコル

まず,最初にリクエストヘッダを送ります. リクエストヘッダの後に空行を入力すると,レスポンスヘッダと共にデータが 送られてきます.

リクエストヘッダ

最初の行でアクセスしたいファイルとアクセスの仕方や使うHTTPのバージョンを指定します.

GET /~kawahira/diary/index.htm HTTP/1.0
Host: www.chichibu.ne.jp
User-Agent: telnet

最初の行は,/~kawahira/diary/index.htmというファイルを送れという意味です. GETは,ファイルを取得するコマンドで,他に,POSTやHEADなども, 殆どのサーバで使えるようです. HTTP/1.0はHTTPのバージョン1.0を使うという意味です.

2行目のHost:の行は,ひとつのサーバで複数のホストを運営している場合などに, どのホストのデータかを識別するのに使います. HTTPの1.0では省略できるようですが,1.1から必須になったので, 入力した方が良いです. User-Agent:はアクセスするのに使ったソフトなどの情報を相手に送ることができます. もちろん,送らなくても良い情報ですが,ブラウザによって表示する内容が違う ページなどではこのデータをみて判断していることが多いです.

レスポンスヘッダ

レスポンスヘッダの後に,一行空いてから,データが送られてきます. レスポンスヘッダは,たとえば下のようなのが一般的です.

HTTP/1.1 200 OK
Date: Thu, 15 May 2003 04:10:10 GMT
Server: Apache/1.3.27 (Unix)
Last-Modified: Wed, 14 May 2003 14:31:54 GMT
Content-Length: 5102

Connection: close
Content-Type: text/html

1行目のHTTP/1.1は相手のサーバが使っているHTTPのバージョンです. そのあとの,200はステータスコードでこの場合は正常にアクセスできたことを示します. よくあるのは,404ならファイルが見つからない場合です.

2~4行目は,サーバの時刻,サーバのソフトとバージョン,ファイルの更新日付です. 5行目は,送られてくるデータの長さです.CGIなどで自動生成しているページなどでは, この行は無いことが多いです. 6行目は,データを送り終わったら自動的に接続を切ることを意味します. こちらから送ったリクエストや相手の設定によっては,接続を切らずに 連続してデータをやり取りすることができます. これはHTTPの1.1から加わった機能です. ここでは,リクエストで1.0を指定したので,接続が切られます. 最後の,Content-Type:はデータのMIMEタイプです. この場合はHTMLファイルです.

レスポンスヘッダも,1行目以外は順番は決められていません. また,一部の情報が削られていたり,行が付け加えられていたりします.

詳しくはRFCを読んでください.

まとめ

このように,普段ブラウザでやっていることも,telnetですることができます. 逆に言えば,telnetでやった手順を自動化して,さらにタグを解釈して 色や表などを表示してくれるのがブラウザの機能です. これで,出かけた先のパソコンが,インターネットに繋がってるのにブラウザが インストールされてない!なんて事があっても,大丈夫ですね?(笑)

履歴