3.3 Web データの流れ
さて、ここからは皆さんにとっても一番なじみ深いと思われる、3階層型システムにおけるWebデータの流れについて説明します。図3.8の流れに沿って見ていきましょう。

3.3.1 クライアントPC から Webサーバーまで
図3.9には、クライアントPC上でWebブラウザを起動してから、Webサーバー上にリクエストが行なわれ、APサーバーへの問い合わせが行なわれるまでの流れを記載しています。それぞれのステップで何が起きているのか、細かく見ていきましょう。
全体の流れは、以下のようになります。
(1)Webブラウザからリクエストが発行される
(2)名前解決が行なわれる
(3)Webサーバーがリクエストを受け付ける
(4)Webサーバーが静的コンテンツか、動的コンテンツかを判断する
(5)必要な経路でデータにアクセスする

まず、インターネットに接続されている環境で、Webブラウザを起動してみます。図3.10は、サーバーではなくPCでの処理の図解です。ディスクからプログラムが読み込まれ、プロセスが起動し、メモリ空間を確保します。この流れは、PCでもサーバーでも、基本的には同じ動きとなります。前節で紹介したシステムコールが用いられている点に注目してください。

Webブラウザのアドレス欄に「http://www.yahoo.co.jp」とURLを入力し、[Enter]キーを押します。このとき、名前解決が行なわれてからWebサーバーにアクセスします。このURLがどういう意味か、皆さん知っていますか?答えは、「HTTPを利用して、www.yahoo.co.jpサーバーにアクセスする」という意味です。
しかしWebブラウザは、このサーバーがどこにあるのかがわからないため、図3.11のように調べる必要があります。この仕組みを「名前解決」と呼びます。
どうしてこのような仕組みが必要なのかというと、インターネット上のアドレスは「IPアドレス」という数値で表わされており、文字列であるURLとIPアドレスとを結びつけないと、通信ができないためです。こうしたネットワーク関連の細かな話は、第6章でご説明します。

さて、Webサーバーまでたどり着きました。Webサーバーの役割は、HTTPリクエストに応じて、適切なファイルやコンテンツを返すことです。
HTTPとは、「HyperTextTransfer Protocol」というプロトコルのことです。プロトコルの意味は第4章で詳しく説明しますが、「HTTPとは、テキストを送受信するための約束事である」とイメージしてください。現在のHTTPは画像や動画データの伝播にも利用されますが、あくまでベースはテキストデータとなっています。
前掲した図3.8(p.57)のWebサーバー上には、HTTPを扱うことができる「httpdプロセス」が稼働しています。Apacheでは、基本的には親プロセスと子プロセスで処理が分担して行なわれます[※2]。設定によりさまざまな処理方法を選べますが、どのケースでも、基本的に子プロセスがHTTPリクエストを受け付けます。
リクエストへの返答内容は、HTMLファイルというテキストデータや、画像や動画といったバイナリデータです。これらは「静的コンテンツ」と「動的コンテンツ」に分類することができます。
「静的コンテンツ」とは、リアルタイムに変化する必要がないものを指します。たとえば、会社のロゴ画像データなど。会社のロゴが毎日変化したら困りますよね。Webサーバーでは、こういったデータの更新頻度が少ないものはディスク上に格納しておき、リクエストがあったときにはこの格納しておいた内容をHTTPに載せて、ユーザーのWebブラウザに返します。
※2 子プロセス内部で複数スレッドが起動する形も取ることができます。
「動的コンテンツ」とは、高頻度で変化するデータを指します。たとえば、ユーザーの銀行残高情報、最新の天気予報データ、ショッピングサイトの買い物かごのデータなど。預金したのに銀行口座が変化しなかったら嫌ですよね。
性能への影響は第8章で説明しますが、こういったデータをサーバー内部のディスク上に格納すると、更新頻度が高すぎるため、ディスク性能がボトルネックとなる場合がありますし、そもそも、いったんファイルという形で格納すること自体が非効率です。こういった動的コンテンツは、一般的に「APサーバー」でHTMLファイルを動的に生成させます。Webサーバーは、動的コンテンツに対するリクエストをAPサーバーに丸投げし、結果を待ちます。