このページでは、インターネットでホームページなどをブラウジングするときに利用するHTTPプロトコルについて説明しています。
HTTPプロトコルとは、Hypertext Transfer Protocolの略で、インターネットでホームページなどをブラウジングするときに利用しているプロトコルです。 HTTPプロトコルは、TCP/IP上のプロトコルで、通常80番ポートを使ってアクセスします。 詳細な定義は、以下のRFCで定義されています。
基本的に、メッセージを要求(リクエスト)し、その応答結果(レスポンス)を表示するだけです。
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.0 | GET, HEAD, PUT, POST, DELETE, LINK, UNLINK |
---|---|
HTTP/1.1 | OPTIONS, 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コマンドで、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# |
最初の、HTTP/1.1 200 OKは、HTTPプロトコルで、正常に転送したことを表します。
その後にヘッダ情報が転送され、最後にHTMLのソースが転送されます。
環境変数として、以下の値が追加設定されているのが確認できます。
HTTP_HOST = ash.jp HTTP_USER_AGENT = Telnet [ja] (Linux) |
このように、HTTPプロトコルは、要求(リクエスト)に対して、応答(レスポンス)が返却されるだけのシンプルなプロトコルです。
余談ですが、HTTPプロトコルという呼び方は、Hyper Text Transfer Protocol プロトコルになって、プロトコルが2重になってしまい、おかしいです。
でも、この方がわかりやすいので、私はよく使います。