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ブラウザと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ブラウザは、送られてきたファイルを解析して、ディスプレイに表示します。この処理をレンダリングといいます。
ここまでに、WebブラウザとWebサーバ間の接続が確立しているとします。
WebブラウザからWebサーバへの要求です。次のような形式になっています。
HTTPリクエストでよく使われるメソッドにGETとPOSTがあります。
どちらも同じ機能で、結果として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/1.1との互換性を保ちつつ、Web効率化向上のための多様なな機能をサポートするプロトコルです。2015年にIETF(Internet Engineering Task Force)によりRFC7540として策定されました。
HTTP/2を利用するにはWebブラウザとWebサーバがこれに対応している必要がありますが、現在のWebブラウザはほとんど対応しています。
ここでは、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サーバ管理ソフトには、OSS(オープンソースソフトウェア)のApache、マイクロソフトのIIS(Internet Information Services)などがあります。
単に事前に作成したファイルをそのままWebブラウザで表示するコンテンツを静的コンテンツといいます。それに対して、FORMなどで指定したデータにより表示される画面が変わるような動的に生成されるコンテンツを動的コンテンツといいます。
動的コンテンツには、JavaScriptのようにWebブラウザ側で動作するクライアントサイドタイプと、Webサーバ側で動作する(Webサーバ側でHTMLファイルを生成してWebブラウザに送る)サーバサイドタイプがあります。
このサーバサイドタイプの処理がWebサーバの機能の一つです。これには、CGIやISAPIなどがあります。
HTMLだけでは,提供できるサービスが限定されます。特にインタラクティブな利用をするには,HTMLのフォームによりデータを入力させ,それによって,HTMLとは独立したプログラムにより処理をして,その結果をWebブラウザに戻すような機能が必要になります。
その機能の標準的なプロトコルがCGIです。また、CGIで呼ばれるプログラムのことをGCIということもあります。
ISAPI(Internet Server Application Programming Interface)は、HTML内で記述したスクリプトをサーバ内で処理してその結果をHTMLに渡すしくみです。そのプログラムをサーブレットともいいます。これも含めてCGIということもあります。
CGI/ISAPIでは、このようなインタフェースをもつ言語なら何でもよいのですが、PHP、Perl、Rubyなどの軽量言語が多く使用されます。
WebブラウザとWebサーバ間の通信では、個人情報など秘密なデータの送受信もあります。秘密通信に特化したHTTPには後述のHTTPSがありますが、HTTP自体も単純なセキュリティ対策がとられています。
HTTPレスポンスのヘッダフィールドにWWW-Authenticate(要求する認証の種類などの情報)があり、次のような認証方法が選択できます。
HTTPリクエストヘッダフィールドAuthorizationで認証に必要なユーザID、パスワードなどを与えることができます。
認証に失敗すると、「401 Unauthorized」認証エラーのステータスコードが表示されます。
通信の暗号化では,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ブラウザが多くなっています。