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

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

概要

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

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

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

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

ウェブサイトを公開するには、静的又は動的ウェブサーバーが必要です。

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

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

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

アクティブラーニング

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

より深く学ぶ

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

ファイルの格納

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

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

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

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

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

HTTP による通信

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

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

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

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

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

エラーページの例として、 MDN の 404 ページウェブサーバーでは、 HTTP サーバーは受信した要求を処理して応答する責任があります。

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

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

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

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

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

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

次のステップ

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

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

このページの貢献者: mfuji09
最終更新者: mfuji09,