Web教材一覧ネットワークアプリケーションプロトコル

HTTPとWebページ

キーワード

HTTP、Webページ、Webブラウザ、Webサーバ、URL、HTTPリクエスト、GET、POST、HTTPレスポンス、HTTP Keep Alive、HTTPパイプライン、ステートレス、セッション、セッションID、クッキー、Cookie、CGI、Basic認証、Digest認証、MD5、HTTPS、SSL/TLS


HTTPとWebページの関係

HTTPは,WebブラウザとWebサーバとの間でのデータ交換のための通信プロトコルです。Webページ閲覧は、通常はHTTPで行われます。
 HTTPはアプリケーション層のプロトコルで、下位プロトコルはTCPです。TCPヘッダのポート番号80によりHTTPが呼び出されます。

WebブラウザでURL「http://www.example.co.jp/webtext/index.html」と入力すると、まずDNSにより、ドメイン名 www.example.co.jp に対応するIPアドレス 150.111.222.26 を取得します。
 HTTPは、このメッセージをTCPを用いてWebサーバ www.example.co.jp に送ります。
 Webサーバは、サーバ内のHTMLファイル /webtext/index.html をHTTPによりWebページに返送します。
 Webブラウザは、送られてきたファイルを解析して、ディスプレイに表示します。この処理をレンダリングといいます。


HTTP(HyperText Transfer Protocol)

ここまでに、WebブラウザとWebサーバ間の接続が確立しているとします。

HTTPリクエスト(要求)

WebブラウザからWebサーバへの要求です。次のような形式になっています。

GET、POST

HTTPリクエストでよく使われるメソッドにGETとPOSTがあります。
 どちらも同じ機能で、結果としてHTTPリクエストを発行するのですが、リクエストの記述や送信データの制限などが異なります。

HTTPレスポンス(応答)

Webサーバからの応答です。HTTPリクエストと同じ形式です。

伝送手段の改善

Webページは、HTMLファイルだけでなく、画像、CSS、スクリプトなどの多数のファイルがあり、それらがすべてダウンロードしないとレンダリングできません(部分的に開始することはできますが)。
 WebサーバはHTMLファイルの内部をしりません。WebブラウザがHTMLファイルを解析する過程でどのファイルが必要かわかるのですから、そのたびにHTTPリクエストとHTTPレスポンスが行われます。
 また、Webページの中にはFORMでデータを入力させ、その結果を返すものもあります。この場合もHTTPリクエストとHTTPレスポンスが行われます。

HTTPはTCPの上位プロトコルです。当初のHTTP規格では、
  TCPでパソコンとWebサーバ間でのコネクションの確立をする。
  HTTPリクエストを送り、HTTPレスポンスを返す。
  TCPでコネクションの切断をする。
というように、コネクションの確立と切断を頻繁に行う必要がありました(左図)。

このような非効率を解消するために、HTTP/1.1では次の改善が行われました。

HTTP Keep Alive(中図)
1つのTCPコネクションに複数のHTTPリクエストを実行できる機能です。これによりコネクションの確立を1回だけで済ませられます。コネクションの確立にはハンドシェイクなど負荷が高い処理ですので、大きな効果があります。
HTTPパイプライン(右図)
複数のTCPコネクションを1つにまとめる並列TCPコネクション技術を用いて、HTTPレスポンスを待たずに次のHTTPリクエストを連続的に送り、Webサーバも連続的にHTTPレスポンスを返す機能です。
HTMLファイルを解析して、他のファイル群がわかるのですから、最初の1回はHTTPレスポンスを待つ必要がありますが、それ以降は連続で行うことができます。

HTTP/2

HTTP/1.1との互換性を保ちつつ、Web効率化向上のための多様なな機能をサポートするプロトコルです。2015年にIETF(Internet Engineering Task Force)によりRFC7540として策定されました。
 HTTP/2を利用するにはWebブラウザとWebサーバがこれに対応している必要がありますが、現在のWebブラウザはほとんど対応しています。

ストリームの多重化
HTTPパイプラインはHTTP/1.1でもあった技術ですが、リクエストとレスポンスを同時に行うことはできませんでした。それを1つの接続上にストリームと呼ばれる仮想的な双方向シーケンスを作ることにより、まだリクエストが続いている間にレスポンスを返すことができます。
ストリームの優先度
HTTPパイプラインには「サーバはリクエストの順番通りにレスポンスを返さなければならない」という制限があります。HTTP/2ではクライアントがPRIORITYフレー ムを用いてストリームに優先度を付けることができるようになりました。
レンダリングに必要なHTMLやCSSを優先し、あまり関係しないJavascriptなどは後回しにすることにより、ディスプレイ表示の開始を早めることができます。
ヘッダフィールドの圧縮
Webページの高度化により、ヘッダフィールドの容量が大きくなりました。コンテンツとともにヘッダフィールドも圧縮すること、以前送信した内容は差分だけを送信することなどの工夫がされました。
フロー制御
TCPのフロー制御に加えて、ストリーム毎にフロー制御が可能になりました。

HTTPとセッション

ここでは、Webページからリンクなどにより他のページに移動するときの、前ページで指定した情報の受渡しをテーマにします。

HTMLはステートレスのプロトコルです。ステートレスとは、セッションの概念をもたないということ、個々のHTTPの通信は独立で、以前の状態を保持しないということです。

例えば、本人確認が必要なWebサイトにアクセスするとき、最初のWebページでユーザIDやパスワードを入力したとします。そのページから他のページに移動するとき、特に手段を講じないならば、移動したWebページは、前のページへのアクセスとは独立しており、誰からのアクセスかを判別できないので、移動したページでもユーザIDやパスワードを入力しなければなりません。
 ユーザIDとパスワードだけでしたら、前のページでのリンクのURLにそれらをパラメータとして記述すれば、後のページに渡すことができましょう。しかし、買物サイトのように、商品、送り先、支払方法など多くの情報を渡すときは、パラメータにするのは不適切です。
 前のページまでの情報をファイルにしておき、後のページでそれを読み込むような手段になります。

このような方法だと、後のページでファイルを特定する仕組みが重要になります。
 しかも、本の注文をしながら、過去の注文の配達状況を知りたいというように、同じ利用者が同時にこのサイトにアクセスしている場合も考えられます。ユーザIDとパスワードだけだと、どちらのデータなのか不明になることもあります。

ここでのセッションとは、利用者が一連の操作の開始から終了まで、すなわち、最初のページを閲覧してから注文のページを完了するまで、あるいは中断するまでの期間を指します。その間を一つのセッションだとして管理します。
 すなわち、最初のページにアクセスしたときにセッションIDを付けてファイルとの対応を作ります。そして次ページからは、セッションIDにより対応するファイルを特定すればよいのです。
 ステートレスなHTTPをセッションIDにより仮想的にステートフルな環境にするのだといえます。

「ファイルを作る」方法のうち、代表的なものがクッキーです。
 Webサーバが得た情報をWebブラウザ側に保存し、他のWebページで読み込む方法です。
 HTTPリクエスト/HTTPレスポンスのメッセージ本体にもCookieオプションがあるように、HTTPでの標準機能になっています。

クッキーは同一セッション内での連続した処理にも使えますし,これまでの閲覧履歴を入れておくような断続的な情報記録にも使えます。Webブラウザを閉じるたび(セッションが切れるたび)に消去されるクッキーを一時的クッキー,有効期限を決めておきそれまで残るクッキーを永続的クッキーといいます。

クッキーは便利なのですが,個人情報を記録していることもありますし,これ自体には暗号化の機能もないので,セキュリティの面で慎重な取扱が必要になります。


Webサーバの機能

Webサーバは,単にWebページを保管して閲覧要求に応じるだけでなく,多様な機能を必要とします。

Webサーバ管理ソフト

Webサーバを管理するソフトウェアです。Webサーバというとき物理的なサーバを指すよりもWebサーバ管理ソフトを指すことが多くなってきました。
 代表的なWebサーバ管理ソフトには、OSS(オープンソースソフトウェア)のApache、マイクロソフトのIIS(Internet Information Services)などがあります。

サーバ側でのHTML生成

単に事前に作成したファイルをそのままWebブラウザで表示するコンテンツを静的コンテンツといいます。それに対して、FORMなどで指定したデータにより表示される画面が変わるような動的に生成されるコンテンツを動的コンテンツといいます。
 動的コンテンツには、JavaScriptのようにWebブラウザ側で動作するクライアントサイドタイプと、Webサーバ側で動作する(Webサーバ側でHTMLファイルを生成してWebブラウザに送る)サーバサイドタイプがあります。
 このサーバサイドタイプの処理がWebサーバの機能の一つです。これには、CGIやISAPIなどがあります。

CGI(Common Gateway Interface)

HTMLだけでは,提供できるサービスが限定されます。特にインタラクティブな利用をするには,HTMLのフォームによりデータを入力させ,それによって,HTMLとは独立したプログラムにより処理をして,その結果をWebブラウザに戻すような機能が必要になります。
 その機能の標準的なプロトコルがCGIです。また、CGIで呼ばれるプログラムのことをGCIということもあります。

ISAPI(Internet Server Application Programming Interface)は、HTML内で記述したスクリプトをサーバ内で処理してその結果をHTMLに渡すしくみです。そのプログラムをサーブレットともいいます。これも含めてCGIということもあります。

CGI/ISAPIでは、このようなインタフェースをもつ言語なら何でもよいのですが、PHP、Perl、Rubyなどの軽量言語が多く使用されます。

CGIの図

HTTPでの認証

WebブラウザとWebサーバ間の通信では、個人情報など秘密なデータの送受信もあります。秘密通信に特化したHTTPには後述のHTTPSがありますが、HTTP自体も単純なセキュリティ対策がとられています。

HTTPレスポンスのヘッダフィールドにWWW-Authenticate(要求する認証の種類などの情報)があり、次のような認証方法が選択できます。
 HTTPリクエストヘッダフィールドAuthorizationで認証に必要なユーザID、パスワードなどを与えることができます。
 認証に失敗すると、「401 Unauthorized」認証エラーのステータスコードが表示されます。

Anoonymous認証
匿名(anoonymous)でのアクセスを許すもので,ほとんど認証はしていません。時によっては電子メールアドレスを聞くことがありますが,それも真偽をチェックしません。昔の平和な時代に共同利用するために行われた方式だといえます。
Basic認証
Webサーバ側ではパスワードを暗号化して保管しますが,WebブラウザとWebサーバの間では暗号化せずに通信します。
Digest認証
ユーザ名とパスワードを,MD5というハッシュ関数を用いて暗号化します。

HTTPS(HTTP over SSL/TLS)

通信の暗号化では,SSL(Secure Sockets Layer)およびその後継のTLS(Transport Layer Security)が広く用いられています。→参照:>SSL/TLS
 HTTPSは、HTTLをSSL/TLSに対応したものです。すなわち、WebブラウザとWebサーバの間の双方向の通信にSSL/TLSによる暗号化や認証を取り込んだものです。
 それ以外にHTTPSがHTTPと異なるのは、HTTPの下位プロトコルがTCPなのに対して、HTTPSではSSLなことです。すなわち、TCPでのコネクション確立をする以前に、セッションの確立(暗号方式の確認)が行われます。

HTTPSを利用するには、次のことが必要になります。
 サーバ側では、サーバ認証を受けること。WebサイトをHTMLS対応にすること。
 利用者側はURLで https://~ のように記述すること。

HTTPSでの通信ができるWebページを開くと右下に鍵マークが表示され、それをクリックすると電子証明書が表示されます。
 近年はHTTPSへの移行が推奨されており、それに対応していないWebページを開くとURL欄に非対応の表示が出るWebブラウザが多くなっています。

鍵マーク

本シリーズの目次へ