telnetでHTTPをしゃべる — コマンドラインでWebページを取得する
この記事の内容
- Windowsにtelnetクライアントをインストールする方法
- telnetを使ってWebサーバーにポート80で接続する手順
- HTTPの
GETコマンドを手動で入力してWebページを取得する方法 Hostヘッダーの必要性と、なぜ省略できないのかの解説- HTTPプロトコルの仕組みを学ぶ教育的価値について
はじめに
「telnetでHTTPをしゃべってWebページを取得できる」という話を聞いたことはありますか?これは昔からよく知られたテクニックで、HTTPプロトコルがいかにシンプルな文字ベースのプロトコルであるかを体感するのに最適な方法です。
ただし現在は、多くのサイトがHTTPSを強制するようになっているため、telnetで直接しゃべれるのはHTTP(ポート80)で接続できるページに限られます。教育目的では、HTTPで取得できるテスト用ページを別途用意しておくのが現実的な運用になります。
telnetクライアントのインストール
Windowsにはデフォルトでtelnetクライアントが入っていないため、まずインストールが必要です。
- スタートメニューから「アプリと機能」を開きます
- 「Windowsのオプション機能」をクリックします
- 「Windowsの機能の有効化または無効化」を選択します
- 一覧の中から「Telnetクライアント」にチェックを入れてOKをクリックします
インストールが完了すると、コマンドプロンプトからtelnetコマンドが使えるようになります。
telnetでWebサーバーに接続する
telnetでWebサーバーに接続するには、ホスト名とポート番号を指定します。HTTPの標準ポートは80番です。
接続に成功すると、カーソルが点滅した状態で待機します。ここからHTTPコマンドを手動で入力します。
GETリクエストを送信する
接続後、以下のようにHTTPのGETコマンドとHostヘッダーを入力してEnterキーを2回押します。
(最後の空行が重要です。Enterを2回押してリクエストを送信します)
入力例
接続後:
成功すると、サーバーからHTMLのソースが返ってきます。
Hostヘッダーの重要性
現代のWebサーバーは、1台のサーバーで複数のサイトをホストしている(バーチャルホスト)ことがほとんどです。そのため、Hostヘッダーを付けないと、どのサイトのページを返せばよいか判断できず、正しいレスポンスが得られないことがあります。
昔はHostヘッダーなしでも応答してくれるサーバーが多くありましたが、現在はほぼ必須と考えてよいでしょう。
実際に試してみる
HTTPで接続できるシンプルなページの場合
ページが取得できると、コマンドプロンプト上にHTMLがそのまま表示されます。文字化けが発生することもありますが、ソースの構造は確認できます。
取得したHTMLの冒頭は、ブラウザの「ページのソースを表示」で見えるものとほぼ同じです。<!DOCTYPE html>や<html>タグから始まり、<head>内にGoogle Analyticsのスクリプトが埋め込まれていたりと、ブラウザが内部でやり取りしている内容をそのまま確認できます。
フレームを使ったページの場合
フレームを使ったサイトの場合、トップページのHTMLにはフレームの定義だけが含まれており、各フレームのソースを別途取得する必要があります。たとえばメニュー部分だけを取得したい場合は、そのフレームのパスを指定してGETリクエストを送ります。
HTTPSへリダイレクトされるページの場合
google.comのようにHTTPSを強制するサイトに接続すると、301 Moved Permanentlyや302 Foundといったリダイレクトのレスポンスが返ってきます。telnetはHTTPSを話せないため、そこから先の通信は人間の手では追えません。
教育的価値
このテクニックは、HTTPプロトコルの仕組みを理解するうえで非常に有益です。
- ブラウザが裏側で何をしているかを可視化できる
- HTTPのリクエスト/レスポンスの構造を直感的に理解できる
- GETだけでなく、POSTなど他のHTTPメソッドも同様に試せる
大学の授業などでも、自分でHTTPサーバーとHTTPクライアントを実装してみるという課題がよく使われます。これだけシンプルな仕組みで動いているということを体感することで、Webの基礎への理解が深まります。
自分でHTTPクライアントをプログラムで実装してWebページを取得しに行く、ということも比較的簡単にできますので、プログラミングの学習としても非常におすすめです。
まとめ
- telnetはWindowsの「Windowsの機能の有効化または無効化」からインストールできます
telnet <ホスト名> 80でWebサーバーのポート80に接続できます- 接続後に
GET / HTTP/1.0とHost:ヘッダーを入力してEnterを2回押すと、HTMLソースが返ってきます - 現在はHTTPSが主流のため、実際に試すにはHTTPで接続できるテスト用ページが必要です
- HTTPがテキストベースのシンプルなプロトコルであることを体感でき、Web技術の基礎を学ぶ教育用途に最適です