[Edit][Create New]
[ IndexPage / ネットとプログラミング / web296 / No26.txt ]

No26.txt

さて、前回、前々回と、Webの基本プロトコルHTTPには、基本的にはGETを含め
て数コマンドしかなく、その使い方も

GET /index.html

のように非常に単純である、という事を解説しました。

しかし、実は上記の方法は実は1993年頃に使われていたHTTP0.9でのアクセス
方法で、少し前時代的な手法です。現在のバージョンはHTTP1.1なので、本来
上記の方法はあまり推奨されたものではありません。前回までは、理解を容易
にするため、上記のような旧い方法を取ったことをご了承ください。

HTTP1.1で、http://web296.com/index.htmlを取得する際には以下のようなコ
マンドを入力すれば大丈夫です。

GET /index.html HTTP/1.1
Host: web296.com

GETの末尾に、HTTP/1.1と、HTTPのバージョンを表す文字列が付きましたね。
それから、次の行にアクセスしたいホストの名前が表示されています。これは
URLに記されているホスト名と同一である事が求められています。HTTP1.0(RFC
1945)ではこの行は必須ではありませんでしたが、HTTP1.1から必須になりまし
た。詳しくはHTTP1.1のRFC2616を見てください。

このHost:のような行は、「HTTPヘッダ」と呼ばれ、複数行指定することがで
きます。ここには、直前に見ていたページが何であるかとか、ブラウザの名前
が何であるか等の情報を記述することができます。具体的には、


GET /index.html HTTP/1.1
Host: web296.com
User-Agent: Mezillo 4.7
Referer: http://nowhere.ad.jp/uso800/detarame

このようにします。HTTP0.9までは、ブラウザからサーバーへは、リクエストし
たいドキュメントの名前しか渡すことができませんでしたが、このHTTPヘッダ
によって様々な情報をサーバーに渡す事が可能になったのです。

HTTPヘッダの終了は空行を用いますので「もうHTTPヘッダは終わり」と思った
ら、改行キーを2回叩く事でブラウザからのリクエストは終わりとみなされ、サ
ーバーからブラウザへのドキュメント本体の受信が始まります。

ところで、CGIスクリプトなどを書いている方は、上記の「User-Agent」や
「Referer」などの文字列に見覚えがないでしょうか? 実は、CGIスクリプトか
ら環境変数として取得できる、ブラウザ名や、直前にユーザーが観ていたペー
ジのURLなどは、上記の「User-Agent」や「Referer」がそのまま使われている
のです。Perlでは$ENV{HTTP_USER_AGENT}や$ENV{HTTP_REFERER}などが該当し
ます。

その他にも、HTTP_で始まる名前を持つ環境変数は全てブラウザの自己申告で
すので、これらの情報は基本的に「全く」信用できないことが分かるでしょう。
特にCGIスクリプトからこれらの情報を使ってセキュリティのチェックなどを
行っている方はこのことに留意しておく必要があります。

今回は、HTTPのブラウザからサーバーへのリクエスト部分を少し掘り下げて解
説してみました。次回は、逆にサーバーからブラウザへのレスポンス部分を詳
しく解説していきたいと思います。