ウェブのしくみ(3/5)~動的ページ編~
2018/02/02
ウェブのしくみ
~ 動的ページ編 ~
ウェブサーバーでのデータ処理
HTTP は、
ブラウザから、ウェブサーバーへデータを取る通信(GET) だけでなく、
ブラウザから、ウェブサーバーへデータを送る通信(POST) も可能です。
ただしウェブサーバーは、リクエストの指定するURLにデータを渡すだけ。
データをどう使うかは、URLの先のファイルしだいということになります。
通常、URLの先は受け取ったデータを処理するプログラムにしておきます。
動的ページ作成
データを受け取ったプログラムは、そのデータを処理します。
プログラムがデータを処理している間、
ウェブサーバーも、ブラウザも、プログラムからの応答を待っています。
このためプログラムは、早急にデータを処理して応答する必要があります。
ブラウザを通して、その利用者にも、処理結果が伝わるようにするため、
プログラムは通常、処理結果がわかるHTMLを応答するようにしておきます。
このようにその場でプログラムが動いて作るHTMLを動的ページと言います。
動的ページの作られ方
CGI方式
動的ページの作成は、まずリクエストを受けたウェブサーバーが
プログラムにデータを渡して始まるのですが、
この時に、あたかもウェブサーバーが、
キーボード や ディスプレイ といった標準入出力機器のようになって、
プログラムの準備からデータ入出力までやりとりする方式をCGIと言います。
※プログラムの準備とは、OSの機能を利用した、
メモリへのロードや、指示データへの変換など を意味しています。
CGIでは、リクエストのたびにプログラムの準備からはじめます。
CGI: Common Gateway Interface
標準的 入出力 の やりとり
のような意味
プログラムの準備を事前にやっておく方式
しかし、ウェブサーバーやブラウザは、プログラムの応答を待っています。
このため、プログラムの準備は事前にやっておき、
リクエストを受けたら、すぐに処理できる様々な方式も作られました。
Java のサーブレットコンテナ や、 Apache モジュール (Perl, PHP,…) 等、
指示データへの変換用プログラムを先に準備しておく方式です。
※ 各プログラムの詳細はここでは割愛します。
さらにこの場合、初回リクエスト後は、個別のデータ処理用プログラムも、
準備ができた状態で残り、すぐに処理できるようになっています。
ウェブサーバーの機能
他のプログラムの助けを借りずに、ウェブサーバーの機能だけで
リクエストへの応答内容を変えることもできます。
例えば、あらかじめ複数のHTMLを用意し、
リクエストのHTTPヘッダ等の情報により、応答を出し分ける設定ができます。
ウェブサーバーは以下のようなブラウザ情報を、出し分けに利用できます。
・ ブラウザの種類
・ IPアドレス
・ リクエスト元HTML
・ 母国語
※ ブラウザの種類をユーザーエージェント(user agent)、
リンク等リクエスト元のHTMLをリファラ(referer) と言います。
通常、出し分けルールがあらかじめ設定ファイルに書かれてあると、
ウェブサーバーはそのルールに従い、自動で出し分けしてくれます。
SSI
また、HTML内にウェブサーバーから情報をもらうタグを書き込んでおき、
リクエストが来たらその時点で、そこへ必要な情報が入るようにもできます。
これをSSIと言います。
SSI: Server Side Includes
サーバー 側での 入れ込み
のような意味
まとめ
ブラウザはPOSTリクエストを使って、URLの指定先にデータを送れます。
POSTリクエストを送る先は、通常、プログラムです。
プログラムが動いて、その場で作るHTMLを動的ページと言います。
ウェブサーバーが標準入出力機器となって毎回プログラムの準備から始める方式をCGIと言います。
短時間に多くの処理をする場合、毎回の準備が不要なJavaサーブレット等が使われます。
ウェブサーバーの設定ファイルにルールを書いておくと、
ブラウザ情報をもとにHTMLの出し分けができます。
リクエスト元のブラウザをユーザーエージェント、
リンク等リクエスト元のHTMLをリファラ と言います。
HTML内にウェブサーバーからの情報をその場で入れ込む方式をSSIと言います。
だから…
ウェブは、URLで指定したHTMLファイルをブラウザに表示するだけでなく、
サーバー側にあるプログラムへ、データをインプットすることもできます。
<インプットされたデータを使うプログラムの例>
小規模なウェブサイトでは、指示変換用プログラムの管理が不要なCGI方式が便利ですが、
大規模なウェブサイトでは、指示変換用プログラムやデータ処理用プログラムを
メモリに常駐させ、毎回の処理効率を上げています。
ウェブサーバーの設定 により、応答内容を変えることが可能です。