ASH | サーバ | セキュリティ | Linux | FreeBSD | DB | Web | CGI | Perl | Java | XML | プログラム | ネットワーク | 標準 | Tips集

telnetでブラウズ(HTTP)

 このページでは、インターネットでホームページなどをブラウジングするときに利用するHTTPプロトコルについて説明しています。

概要

 HTTPプロトコルとは、Hypertext Transfer Protocolの略で、インターネットでホームページなどをブラウジングするときに利用しているプロトコルです。  HTTPプロトコルは、TCP/IP上のプロトコルで、通常80番ポートを使ってアクセスします。  詳細な定義は、以下のRFCで定義されています。

 基本的に、メッセージを要求(リクエスト)し、その応答結果(レスポンス)を表示するだけです。

HTTPのアクセスログ

 ApacheなどのWebサーバのログを見ると、リクエストとレスポンスが、以下の形式で出力されます。

アクセスログの書式
 アクセス元 - - [アクセス時間] "メソッド名 URL名 プロトコルバージョン" レスポンスコード
例:
 10.0.1.20 - - [01/Jul/1999:23:22:46 +0900] "GET /usr/joe/index.html HTTP/1.0" 200 2060

 メソッドの種類には、GETやPOSTなどがあります。
 GETメソッドは、HTMLデータや画像データなどを取得する場合に使用します。 GETメソッドで要求すると、ヘッダ情報とHTMLデータが返却されます。 GETメソッドでCGIを呼び出すこともできます。 パラメータを渡す場合は、URLの後に"?name1=データ1&name2=データ2"という形式で指定します。
 HEADメソッドは、ファイルサイズや更新日時を調べる場合に利用します。 HEADメソッドを利用すると、ヘッダ情報だけが返却されます。
 POSTメソッドは、CGIなどにデータを渡す場合に使用します。 パラメータなどのデータは、環境変数などによって、CGIに渡ります。
 以下に、HTTPのバージョンとメソッドの種類を示します。

メソッドの種類
HTTP/1.0GET, HEAD, PUT, POST, DELETE, LINK, UNLINK
HTTP/1.1OPTIONS, TRACE, PATCH

 以下に、レスポンスコードの一覧を示します。
 100番台は通信エラー、200番台は正常終了、300番台はリダイレクト、400番台はクライアントエラー、500番台はサーバエラーを表しています。 リダイレクトとは、クライアントの指定したURLに移動した場合などに返却されます。

レスポンスコード
コード : 内容コード : 内容
100 : Continue
101 : Switching Protocols
200 : OK
201 : Created
202 : Accepted
203 : Non-Authoritative Information
204 : No Content
205 : Reset Content
206 : Partial Content
300 : Multiple Choices
301 : Moved Permanently
302 : Moved Temporarily
303 : See Other
304 : Not Modified
305 : Use Proxy
400 : Bad Request
401 : Unauthorized
402 : Payment Required
403 : Forbidden
404 : Not Found
405 : Method Not Allowed
406 : Not Acceptable
407 : Proxy Authentication Required
408 : Request Time-out
409 : Conflict
410 : Gone
411 : Length Required
412 : Precondition Failed
413 : Request Entity Too Large
414 : Request-URI Too Large
415 : Unsupported Media Type
500 : Internal Server Error
501 : Not Implemented
502 : Bad Gateway
503 : Service Unavailable
504 : Gateway Time-out
505 : HTTP Version not supported

 レスポンスコードは、ログファイルなどに出力されますので、知っていると役に立つと思います。

telnetでブラウジング

 では、実際にtelnetでブラウジングしてみましょう。
 telnetコマンドで、WWWサーバ名と、80番ポートを指定します。

Linux# telnet ash.jp 80

 そこで、環境変数をすべて表示するCGI(env.cgi)を起動してみます。
 まず、GETコマンドで、取得したいURLと、HTTPのバージョンを指定します。

GET /~joe/prog/cgi/env01.cgi HTTP/1.0

 ここで、リターンのみを入力しても表示されますが、以下のオプションも入力してみます。 指定したオプションは、環境変数としてCGIに渡ります。

User-Agent: Telnet [ja] (Linux)
Host: www.ash.jp

 リターンのみを入力すると、レスポンスと、HTMLが表示されます。 当然、HTMLのソースが表示されるだけですから、頭の中でHTMLを解析し画面イメージを想像する必要があります。

 以下に実行結果を示します。

Linux# telnet ash.jp 80
Trying 210.154.87.18...
Connected to ash.jp.
Escape character is '^]'.

GET /~joe/prog/cgi/env01.cgi HTTP/1.0
User-Agent: Telnet [ja] (Linux)
Host: ash.jp

HTTP/1.1 200 OK
DeleGate-Ver: 5.8.8 (delay=7)
Date: Fri, 02 Jul 1999 09:56:24 GMT
Server: Apache/1.3.3 (Unix)
Content-Type: text/html
Via: 1.0 210.154.87.18:80 (DeleGate/5.8.8)
Content-Length: 954

<html><body>
<h1>CGIでの環境変数一覧</h1>
<hr>
<h3>環境変数の表示</h3>
DOCUMENT_ROOT = /usr/local/share/apache/htm<br>
GATEWAY_INTERFACE = CGI/1.1<br>
HTTP_FORWARDED = by http://210.154.87.18:80/ (DeleGate/5.8.8) for sv01.lo.ash.or
.jp<br>
HTTP_HOST = ash.jp<br>
HTTP_USER_AGENT = Telnet [ja] (Linux)<br>
HTTP_VIA = 1.0 210.154.87.18:80 (DeleGate/5.8.8)<br>
PATH = /usr/local/sbin:/usr/local/bin:/sbin:/usr/sbin:/bin:/usr/bin<br>
QUERY_STRING = <br>
REMOTE_ADDR = 10.0.1.254<br>
REMOTE_PORT = 12621<br>
REQUEST_METHOD = GET<br>
REQUEST_URI = /~joe/prog/cgi/env01.cgi<br>
SCRIPT_FILENAME = /home/joe/public_html/prog/cgi/env01.cgi<br>
SCRIPT_NAME = /~joe/prog/cgi/env01.cgi<br>
SERVER_ADMIN = info@ash.jp<br>
SERVER_NAME = ash.jp<br>
SERVER_PORT = 80<br>
SERVER_PROTOCOL = HTTP/1.0<br>
SERVER_SIGNATURE = <ADDRESS>Apache/1.3.3 Server at ash.jp Port 80</ADDRESS>
<br>
SERVER_SOFTWARE = Apache/1.3.3 (Unix)<br>
<hr><br>
このCGIのソース:<a href=env01.txt>env01.cgi</a><br>
</body></html>
Connection closed by foreign host.

 最初の、HTTP/1.1 200 OKは、HTTPプロトコルで、正常に転送したことを表します。
 その後にヘッダ情報が転送され、最後にHTMLのソースが転送されます。
 環境変数として、以下の値が追加設定されているのが確認できます。

HTTP_HOST = ash.jp
HTTP_USER_AGENT = Telnet [ja] (Linux)

 このように、HTTPプロトコルは、要求(リクエスト)に対して、応答(レスポンス)が返却されるだけのシンプルなプロトコルです。
 余談ですが、HTTPプロトコルという呼び方は、Hyper Text Transfer Protocol プロトコルになって、プロトコルが2重になってしまい、おかしいです。 でも、この方がわかりやすいので、私はよく使います。



Copyright (C)1995-2002 ASH multimedia lab.
mail : info@ash.jp