Webアクセスの基本(2)Part1:基本 --- HTTPによるリクエストとレスポンスを確認
初公開日:2006/03/02
図1-3 WebブラウザはHTTPリクエストでデータを要求する
Webページのデータを要求するため,WebブラウザはHTTPリクエストをWebサーバーに送る。もっとも重要なのは1行目にあるリクエスト行だが,以下に続くメッセージ・ヘッダーやメッセージ・ボディにもさまざまな付加情報が入る。 [画像のクリックで拡大表示]
図1-4 リクエストに応じて,WebサーバーがHTTPレスポンスを返す
Webサーバーは,ブラウザから受け取ったHTTPリクエストに応じて,HTTPレスポンスを返信する。HTTPレスポンスの構造は,HTTPリクエストとほぼ同じだが,内容は異なる。 [画像のクリックで拡大表示]
図1-5 Webサーバーの仕事は,要求されたデータを探して返すこと
Webブラウザからのリクエストはデータのパスを示しているが,それは,実際のサーバー・マシンのディレクトリとは無関係である。 [画像のクリックで拡大表示]
HTTPによるリクエストとレスポンスを確認Webブラウザが要求を送り,Webサーバーが応答を返す——。Webアクセスを一言で表現すると,こうなる。こうした単純なやりとりの手順や内容を決めているのが,HTTP*というプロトコルである。このHTTPがWebアクセスの根幹と言える。 5段階に分けて考えようまずはWebアクセス全体の流れを簡単に確認しておこう(図1-1[拡大表示])。ここでは,流れを五つのステップに分けて考えてみる。 ステップ1 : ユーザーがWebブラウザにURLを入力するステップ2 : WebブラウザがリクエストをWebサーバーへ送る ステップ3 : Webサーバーがリクエストを解析して処理する ステップ4 : WebサーバーがレスポンスをWebブラウザへ返信する ステップ5 : Webブラウザが受信データを解析して表示する ステップ1は,ユーザーがWebブラウザのアドレス欄にURLを入力して,リターン・キーを押す作業だ。明示的にURLを入力する代わりに,Webページのリンクをクリックしても同じである。ユーザーが手を動かすのは,ここまでで,ステップ2以降はWebブラウザやWebサーバーの処理になる。 ステップ2は,WebブラウザがWebページのデータをWebサーバーに要求する。ここではHTTPリクエストというメッセージがWebサーバーに送られる。 次のステップ3は,処理がWebサーバーに移る。Webサーバーは,ブラウザから受け取ったHTTPリクエストを読み取り,要求内容を分析する。 そして要求されたデータを返信する。これがステップ4だ。この返信データは,HTTPレスポンスと呼ばれる。 最後のステップ5は,Webブラウザがサーバーから受け取ったデータを解析し,Webページとしてパソコンに表示する。このWebページのデータはHTMLと呼ばれる書式で記述されている。このHTMLデータがWebページの実体である。 この五つのステップの流れをきちんと理解すれば,Webアクセスの基礎が身につく。カラクリを理解するうえでも重要なので,各ステップでどのような処理が進むのかを詳しく見ていこう。 Webページの場所をURLで指定するURLという用語は,インターネットに普段から接している読者なら,よく耳にしているだろう。uniform(ユニフォーム) resource(リソース) locator(ロケータ)の略で,Web上のデータの場所を示す標準的な表記法である。この表記法を使えば,インターネット上に散らばる膨大なWebページのデータ一つひとつを特定できる。 Webブラウザのアドレス欄に入力するURLは,「http://nnw.nikkeibp.co.jp/nnw/index.html」のように書く(図1-2[拡大表示])。このうち,先頭のhttpはスキームと呼ばれ,WebブラウザがWebページのデータにアクセスするための手段(プロトコル)を表す。国際的な調整機関のIANA(アイアナ)*が名称を定めており,たいていはプロトコル名がそのままスキーム名になる。通常のWebアクセスでは,プロトコルとしてHTTPを使うので,httpになる。 コロン(:)の後ろが,データの場所を示す部分である。コロンの直後にある2個のスラッシュ(//)は,そのあとに続く部分がホスト名であることを示す*。ホスト名とは,Webサーバーの名前のことで,ドメイン名*を使うのが一般的である。ただし,インターネット上の場所がわかればよいので,IPアドレスを使うこともある。 ホスト名の後ろにはポート番号*が入ることになっているが,省略されるのが一般的である。Webサーバーが待ち受けているポート番号は,通常80番と決まっている*。このため,URLでポート番号を省略すると,Webブラウザは80番ポートにアクセスする。 ホスト名の後ろの部分は「パス」と呼ばれる。これは,Webサーバー上でのデータの場所を指す。 人が読めるテキストをやりとりアドレス欄にURLを入れてリターン・キーを押すと,WebブラウザはURLで指定されたデータをWebサーバーに要求する。このときWebブラウザがWebサーバーに送るのが,HTTPリクエストである。 HTTPリクエストはテキストで出来上がっていて,人がそのまま読むことができる。通常,このHTTPリクエストは複数行にわたっている。1行が一つの項目になり,それぞれの項目が意味を持っている。つまり,HTTPリクエストの見かけは,個条書きにしたテキスト・ファイルのようなものと考えればよい。 このHTTPリクエストを分解してみると,三つの部分に分けられる。リクエスト行,メッセージ・ヘッダー,エンティティ・ボディである(図1-3[拡大表示])。 もっとも重要なのは,先頭の1行目に書かれるリクエスト行である。この1行で,Webサーバーにどんな処理をしてほしいかを伝えている。Webシステムが発案された初期のころは,このリクエスト行だけをWebサーバーに送っていたくらいだ*。つまり,リクエスト行の内容さえ理解できれば,HTTPリクエストの大まかな内容がわかる。 メッセージ・ヘッダーは,リクエスト行の次に続くテキスト列で,通常は複数行ある*。ここには,Webブラウザの種類やバージョン,対応するデータ形式などの付加的な情報が書かれる。 そして,区切りのための空白行のあと,エンティティ・ボディが続く。ここは,WebブラウザからWebサーバーにファイルなどの比較的大きなデータを送るときに用いる部分である。送るデータがないときは使われない。 1行目で大筋がわかるリクエスト行はとりわけ重要なので,もう少し詳しく見ておこう。 リクエスト行は,次のような形式になっている。 GET /index.html HTTP/1.1この先頭にあるGET(ゲット)という部分はメソッドと呼ばれ,Webサーバーに実行してほしい処理を示すコマンドである。図1-3に示すように,メソッドにはいくつかの種類があるが,よく使うのはGETとPOST(ポスト)である。Webブラウザが単純にWebページのデータをサーバーに要求するときはGET,Webブラウザ側から大きなデータを送信するときにはPOSTを使う。 次に続く「/index.html」の部分はURI*と呼ばれる。名前がURLと似ているように,これらには深い関係がある。URLからスキームやドメイン名などを取り除いもの,すなわちパス名の部分がURIと考えればよい*。 リクエスト行の最後にある「HTTP /1.1」は,WebブラウザがサポートしているHTTPのバージョンを表す。つまり,このリクエスト行で「/index.htmlを送ってください。私はHTTP/1.1をサポートしています」と,Webサーバーに伝えているのである。 データとともに処理結果も通知Webサーバーは,Webブラウザから要求されると,HTMLデータなどを返信する。この返信するデータは,HTTPレスポンスと呼ばれ,HTTPリクエストの構造とほぼ同じになる。つまり,人が読めるテキスト・データになっていて,大きく三つの部分に分かれている。それぞれステータス行,メッセージ・ヘッダー,エンティティ・ボディと呼ばれている(図1-4[拡大表示])。 このHTTPレスポンスで重要なのは,やはり1行目にくるステータス行である。ステータス行は, HTTP/1.1 200 OKような形式になる。最初の「HTTP /1.1」の部分は,WebサーバーがサポートするHTTPのバージョンを表している。次に続く「200」の部分は,ステータス・コードと呼ばれ,ブラウザからのリクエストをどう処理したかという結果を番号で表す。最後の「OK」の部分は,ステータス・コードの補足説明である。WebサーバーがWebブラウザからのHTTPリクエストをうまく処理して,適切なデータを返信する場合は,この例のように「200 OK」になる。 ステータス行に続くメッセージ・ヘッダーは,Webサーバーがより詳細な情報をWebブラウザに伝えるために利用される。例えば,返信データの形式や大きさ,データの有効期限,あるいはWebブラウザへの動作の指示などが記述される。 そして,区切りのための空白行のあと,エンティティ・ボディが続く。ここにWebブラウザに返信するWebページのデータが入る。 URLは実際のディレクトリではない話が前後するが,Webサーバー側の処理も確認しておこう。 Webサーバーの実体は,サーバー・マシン上で動いているソフトウエアである。Apache(アパッチ)やIIS*などが有名だが,WebブラウザからのHTTPリクエストを解釈して適切に処理し,HTTPレスポンスを返す点はどれも同じである。 Webサーバー・ソフトは,WebブラウザからHTTPリクエストを受け取ると,その内容を解析する。まずメソッドを調べ,Webブラウザの要求内容を確認する。そして,リクエスト中のURIを分析し,要求しているデータのありかを調べる。 ただURIであるパス名は,Webサーバー上のデータのありかを直接指しているとは限らない。多くのWebサーバーは外部に仮想的なディレクトリを見せ,それにアクセスさせている。 そのためにWebサーバー・ソフトは,外部に公開する仮想ディレクトリとサーバー・マシンの実際のディレクトリとの対応関係を把握している。その対応関係から,WebサーバーはリクエストのURIに相当する実際のデータのありかを見つけ出す。そして目的のデータが入っているファイルを読み出し(図1-5[拡大表示]),そのデータをWebブラウザに返信する。 やりとりを繰り返してページを作るここまでのやりとりで,WebブラウザはWebサーバーからデータを受け取ることができる。 しかし,1回だけのやりとりでWebページが出来上がることはまずない。最初のやりとりで送られてくるのはHTMLデータだけ*だからである。最近のWebページのほとんどは,画像などが貼り込まれている。こうした画像を得るには,再びWebサーバーからデータをもらう必要がある。 つまり,実際のWebページを表示するまでには,HTTPリクエストを出してレスポンスを受け取るやりとりが,何回も繰り返される(図1-6[拡大表示])。 Webブラウザは,まずHTMLデータを要求し,それに応じてWebサーバーがHTMLデータを返す。そして,Webブラウザは,HTMLデータを上から順に解析して,文字などをHTMLで指示された大きさで表示していく。 その途中に<IMG(イメージ)>と書かれたタグ*を見つけると,Webサーバーに改めて画像データを要求する。<IMG>タグは,「そこに画像を貼り込んで表示せよ」というHTMLの命令で,画像データのありかを示すURLも書かれている。 しかも,こうした画像データはHTMLデータを持っていたサーバーにある必要はない。<IMG>タグに書かれたURLには,ブラウザのアドレス欄に表示されるURLと同様に,ホスト名なども記載されるので,異なるサーバーにあってもよいのである。 ◆ ◆ ◆ ここまでくれば,Webアクセスの基本は一通り掌握できたと言える。これらの知識をベースに,Part2でWebアクセスの実際に迫っていこう。
関連キーワード |