この記事では、Webサーバとは何か、Webサーバの仕組み、なぜWebサーバが重要なのかを復習します。

前提知識: すでにインターネットの仕組みを知っており、Webページ、Webサイト、Webサーバ、検索エンジンの違いを理解していること
目的: Webサーバとは何かを学び、その仕組みに関して全般的な理解すること。

概要

「Webサーバ」はハードウェアまたはソフトウェア、または共に動作する両方を指すことがあります。

  1. ハードウェアの側面では、WebサーバはWebサーバソフトウェアとWebサイトのコンポーネントファイル (例えば、 HTML 文書、画像、 CSS スタイルシート、 JavaScript ファイル) を格納しているコンピューターです。インターネットに接続され、Webに接続された他の端末と物理的なデータ交換に対応しています。
  2. ソフトウェアの側面では、Webサーバは保持しているファイルにWebのユーザーがどのようにアクセスするかを制御するいくつかの部分、少なくとも HTTP サーバを含みます。 HTTP サーバは URL (Webアドレス) および HTTP (ブラウザーがWebページを閲覧するために使用) を理解するソフトウェアの一つです。格納しているWebサイトのドメイン名 (mozilla.org など) を通してアクセスすることができ、コンテンツをエンドユーザーの端末に配信します。

最も基本的な水準では、ブラウザーはWebサーバが保持しているファイルが必要になったらいつでも、 HTTP でファイルをリクエストします。リクエストが正しいWebサーバ (ハードウェア) に届くと、 HTTP サーバ (ソフトウェア) がリクエストを受け付け、リクエストされた文書を探し (ない場合は 404 レスポンスが返される)、ブラウザーに HTTP を通して送り返します。

HTTP を通したクライアント/サーバー接続の基本的な説明

Webサイトを公開するには、静的または動的Webサーバが必要です。

静的Webサーバ、またはスタックは、コンピューター (ハードウェア) と HTTP サーバ (ソフトウェア) から構成されます。サーバが保持しているファイルをブラウザーへ「そのまま」送るので、「静的」と呼ばれます。

動的Webサーバは、静的Webサーバに加えて追加のソフトウェア、一般的にはアプリケーションサーバおよびデータベースで構成されます。アプリケーションサーバが、 HTTP サーバを通してブラウザーに送信する前に、保持しているファイルを更新するので「動的」と呼ばれます。

例えば、ブラウザーで見ることができる最終的なWebページを生成するために、アプリケーションサーバはデータベースからのコンテンツで HTML のテンプレートを埋めるかもしれません。 MDN やウィキペディアのようなサイトは非常に多くのWebページを持っていますが、実際の HTML 文書が存在するわけではなく、巨大なデータベースとわずかな HTML テンプレートのみが存在します。この構成で、より速くより簡単にコンテンツを保守したり配信したりすることができます。

アクティブラーニング

まだアクティブラーニングはありません。ご協力をお願いします

より深く学ぶ

すでに述べたとおり、Webページを呼び出すために、ブラウザーはWebサーバにリクエストを送信し、Webサーバは自身のストレージスペースからリクエストされたファイルを探し始めます。ファイルを見つけると、サーバはファイルを読み込み、必要に応じて処理を行い、ブラウザーに送信します。それらのプロセスを詳細に見てみましょう。

ファイルの格納

Webサーバは最初に、Webサイトの HTML 文書およびその関連資産である画像、 CSS スタイルシート、 JavaScript ファイル、フォント、動画などのファイルを格納する必要があります。

技術的には、自分自身のコンピューターにこれらのファイルをすべて保持することはできますが、次のような理由で、専用のWebサーバにすべてを格納したほうがはるかに便利です。

  • 常に起動して動作している
  • 常にインターネットに接続されている
  • 常に固定の IP アドレスを持っている (プロバイダーは家庭用の回線に固定 IP アドレスを提供しているとは限らない)
  • サードパーティのプロバイダーによって管理されている

これらすべての理由から、良いホスティングのプロバイダーを探すことは、Webサイトを構築する上で重要な部分です。様々なサービス会社が提供するものを探し、ニーズや予算に合う一つを選択しましょう (無料から月当たり数千ドルまでのサービスがあります)。詳しくはこの記事にあります。

Webのホスティングサービスを構成したら、後はWebサーバにファイルをアップロードするだけです。

HTTP による通信

次に、Webサーバは HTTP (Hypertext Transfer Protocol) への対応を提供しています。名前にある通り、 HTTP はコンピューター間でハイパーテキスト (つまり、リンクされたWeb文書) を転送する方法を定義しています。

プロトコルは二台のコンピューター間で通信をする規則を設定します。 HTTP はテキストによる、ステートレスのプロトコルです。

テキストによる
すべてのコマンドがプレインテキストで、人間が読める形です。
ステートレス
サーバもクライアントも以前の通信を覚えていません。例えば、 HTTP 単独では、サーバは入力したパスワードや、処理中のどのステップにいるかを覚えていることはできません。このような仕事をするには、アプリケーションサーバが必要になります。 (以降の記事で様々な技術を説明します。)

HTTP はクライアントとサーバがどのように通信するかについての明確なルールを提供しています。 HTTP 自体については、後で技術記事で説明します。これからは、以下のようなことに気を付けてください。

  • クライアントだけが HTTP リクエストを作成することができ、サーバだけに送ることができます。サーバはクライアントの HTTP リクエストに返答することだけができます。
  • HTTP でファイルをリクエストするとき、クライアントはファイルの URL を示さなければなりません。
  • Webサーバはすべての HTTP リクエストに、少なくともエラーメッセージは答えなければなりません

エラーページの例として、 MDN の 404 ページWebサーバでは、 HTTP サーバは受信したリクエストを処理してレスポンスする責任があります。

  1. リクエストを受信すると、 HTTP サーバは最初にリクエストされた URL が既存のファイルに一致するかどうかをチェックします。
  2. もしあれば、Webサーバはブラウザーにファイルを送り返します。なければ、アプリケーションサーバが必要なファイルを作成します。
  3. どちらの処理もできない場合、Webサーバは 404 Not Found としてよく知られているエラーメッセージをブラウザーに返します。 (このエラーは多くのWebデザイナーが、404 エラーページをデザインするのに時間を割きます。)

動的コンテンツと静的コンテンツ

大まかに言って、サーバは静的コンテンツと動的コンテンツのどちらかを提供することができます。「静的」は「そのまま提供する」という意味です。静的なWebサイトは構築するのが最も簡単なので、最初に静的サイトを作成することをお勧めします。

「動的」はサーバがコンテンツを処理したり、データベースからその場で作成したりすることを意味します。この方法はより柔軟性を提供できますが、技術スタックがより扱いにくくなり、Webサイトを構築することは劇的に複雑になります。

例を挙げれば、今あなたが見ているページがそれです。それを保持している Web サーバには、データベースから記事コンテンツを取り出し、整形し、HTML テンプレート内に配置し、結果を送信するためのアプリケーションサーバがあります。この場合、アプリケーションサーバは Kuma と呼ばれ、 Python で (Django フレームワークを使用して) 構築されています。 Mozilla チームは Kuma を MDN の特定のニーズのために作成しましたが、他のたくさんの技術で構築された同様のアプリケーションがたくさんあります。

アプリケーションサーバはとてもたくさんあり、特定のサーバを提案することはとても難しいことです。アプリケーションサーバによっては、特定のWebサイトカテゴリに対応しており、ブログ、Wiki、 E コマースなどのような、 CMS (Content Management System) と呼ばれるものはより一般的です。動的Webサイトを構築するのであれば、ニーズに合ったツールを選択するのに時間をかけましょう。Webサーバプログラミングを学習しようとするのでなければ (これ自体はエキサイティングな領域ですが)、独自のアプリケーションサーバを作成する必要はありません。これはちょうど車輪の再発明のようなものです。

次のステップ

Web サーバのことがよく分かったら、以下のようなことができます。

ドキュメントのタグと貢献者

このページの貢献者: silverskyvicto, mdnwebdocs-bot, mfuji09
最終更新者: silverskyvicto,