blob: bd7ba00222706f4e2047de5c74910d63d0d67fc9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
|
---
title: Web サーバとは
slug: Learn/Common_questions/What_is_a_web_server
tags:
- Beginner
- インフラ
translation_of: Learn/Common_questions/What_is_a_web_server
---
<div class="summary">
<p><span class="seoSummary">この記事では、Webサーバとは何か、Webサーバの仕組み、なぜWebサーバが重要なのかを復習します。</span></p>
</div>
<table class="learn-box standard-table">
<tbody>
<tr>
<th scope="row">学習の前提:</th>
<td>すでに<a href="/ja/docs/Learn/Common_questions/How_does_the_Internet_work">インターネットの仕組み</a>を知っており、<a href="/ja/docs/Learn/Common_questions/Pages_sites_servers_and_search_engines">Webページ、Webサイト、Webサーバ、検索エンジンの違いを理解していること</a>。</td>
</tr>
<tr>
<th scope="row">学習の目的:</th>
<td>Webサーバとは何かを学び、その仕組みに関して全般的な理解すること。</td>
</tr>
</tbody>
</table>
<h2 id="Summary" name="Summary">概要</h2>
<p>「Webサーバ」はハードウェアまたはソフトウェア、あるいは両方が動作しているものを指します。</p>
<ol>
<li>ハードウェアの観点では、Webサーバとは、WebサーバソフトウェアとWebサイトのコンポーネントファイル (例えば、 HTML 文書、画像、 CSS スタイルシート、 JavaScript ファイル) を格納しているコンピューターのことです。インターネットに接続され、Webに接続された他の端末と物理的なデータ交換に対応しています。</li>
<li>ソフトウェアの観点では、Webサーバとは、ホストにあるファイルに対する、Webユーザーのアクセスを制御する、いくつかの部品の集まりです。最小限の部品は <em>HTTP サーバです。</em> HTTP サーバは {{Glossary("URL")}} (Webアドレス) および {{Glossary("HTTP")}} (ブラウザーがWebページを閲覧するためのプロトコル) を理解するソフトウェアのことです。格納しているWebサイトのドメイン名 (<code>mozilla.org</code> など) を通してアクセスすることができ、コンテンツをエンドユーザーの端末に配信します。</li>
</ol>
<p>最も基本的な水準では、ブラウザーはWebサーバが保持しているファイルが必要になったらいつでも、 HTTP でファイルをリクエストします。リクエストが正しいWebサーバ (ハードウェア) に届くと、 <em>HTTP サーバ</em> (ソフトウェア) がリクエストを受け付け、リクエストされた文書を探し (ない場合は <a href="/ja/docs/Web/HTTP/Status/404">404</a> レスポンスが返される)、ブラウザーに HTTP を通して送り返します。</p>
<p><img alt="HTTP を通したクライアント/サーバー接続の基本的な説明" src="https://mdn.mozillademos.org/files/8659/web-server.svg" style="height: 200px; width: 600px;"></p>
<p>Webサイトを公開するには、静的または動的Webサーバが必要です。</p>
<p><strong>静的Webサーバ</strong>、はスタックとも呼ばれますが、コンピューター (ハードウェア) と HTTP サーバ (ソフトウェア) から構成されます。サーバが保持しているファイルをブラウザーへ「そのまま」送るので、「静的」と呼ばれます。</p>
<p><strong>動的Webサーバ</strong>は、静的Webサーバと追加のソフトウェアからなります。追加ソフトウエアは、一般的には<em>アプリケーションサーバと</em><em>データベースからなります</em>。アプリケーションサーバが、 保持しているファイルを変更してから、HTTP サーバを通してブラウザーに送信するので「動的」と呼ばれます。</p>
<p>例えば、ブラウザーで見ることができる最終的なWebページを生成するために、アプリケーションサーバはデータベースからのコンテンツで HTML のテンプレートを埋めることがあります。 MDN やウィキペディアのようなサイトは非常に多くのWebページを持っていますが、実際の HTML 文書が存在するわけではなく、巨大なデータベースとわずかな HTML テンプレートのみが存在しているのです。この構成をとることで、より速く、より簡単にコンテンツを保守したり配信したりすることができます。</p>
<h2 id="Active_learning" name="Active_learning">アクティブラーニング</h2>
<p><em>まだアクティブラーニングはありません。<a href="/ja/docs/MDN/Getting_started">ご協力をお願いします</a>。</em></p>
<h2 id="Deeper_dive" name="Deeper_dive">より深く学ぶ</h2>
<p>すでに述べたとおり、Webページを呼び出すために、ブラウザーはWebサーバにリクエストを送信し、Webサーバは自身のストレージスペースからリクエストされたファイルを探し始めます。ファイルを見つけると、サーバはファイルを読み込み、必要に応じて処理を行い、ブラウザーに送信します。それらのプロセスを詳細に見てみましょう。</p>
<h3 id="Hosting_files" name="Hosting_files">ファイルの格納</h3>
<p>Webサーバは最初に、Webサイトの HTML 文書およびその関連資産である画像、 CSS スタイルシート、 JavaScript ファイル、フォント、動画などのファイルを格納する必要があります。</p>
<p>技術的には、Webサーバとは別のコンピューターにこれらのファイルをすべて保持するようにもできます。しかし、次のような理由で、専用のWebサーバにすべてを格納したほうがはるかに便利です。</p>
<ul>
<li>Webサーバは常に動作している</li>
<li>常にインターネットに接続されている</li>
<li>常に固定の IP アドレスを持っている ({{Glossary("ISP", "プロバイダー")}}は家庭用の回線に固定 IP アドレスを提供しているとは限らない)</li>
<li>サードパーティのプロバイダーによって管理されている</li>
</ul>
<p>これらすべての理由から、良いホスティングのプロバイダーを探すことは、Webサイトを構築する上で重要な部分です。様々なサービス会社が提供するものを探し、ニーズや予算に合う一つを選択しましょう (無料から月当たり数千ドルまでのサービスがあります)。詳しくは<a href="/ja/docs/Learn/Common_questions/How_much_does_it_cost">この記事</a>にあります。</p>
<p>Webのホスティングサービスを構成したら、後は<a href="/ja/docs/Learn/Common_questions/Upload_files_to_a_web_server">Webサーバにファイルをアップロードする</a>だけです。</p>
<h3 id="Communicating_through_HTTP" name="Communicating_through_HTTP">HTTP による通信</h3>
<p>次に、Webサーバは {{Glossary("HTTP")}} (<strong>H</strong>yper<strong>t</strong>ext <strong>T</strong>ransfer <strong>P</strong>rotocol) への対応を提供しています。名前にある通り、 HTTP はコンピューター間でハイパーテキスト (リンクされたWeb文書) を転送する方法を定義しています。</p>
<p>{{Glossary("Protocol", "プロトコル")}}は二台のコンピューター間で通信をする規則を設定します。 HTTP はテキストによる、ステートレス(下記参照)のプロトコルです。</p>
<dl>
<dt>テキストによる</dt>
<dd>すべてのコマンドがプレーンテキストで、人間が読める形です。</dd>
<dt>ステートレス</dt>
<dd>サーバもクライアントも以前の通信を覚えていません。例えば、 HTTP 単独では、サーバは入力したパスワードや、処理中のどのステップにいるかを覚えていることはできません。このような仕事をするには、アプリケーションサーバが必要になります。 (以降の記事で様々な技術を説明します。)</dd>
</dl>
<p>HTTP はクライアントとサーバがどのように通信するかについての明確なルールを提供しています。 HTTP 自体については、後で<a href="/ja/docs/Web/HTTP">技術記事</a>で説明します。これからは、以下のようなことに気を付けてください。</p>
<ul>
<li><em>クライアント</em>だけが HTTP リクエストを作成することができ、<em>サーバ</em>だけに送ることができます。サーバは<em>クライアント</em>の HTTP リクエストに<em>返答</em>することだけができます。</li>
<li>HTTP でファイルをリクエストするとき、クライアントはファイルの {{Glossary("URL")}} を示さなければなりません。</li>
<li>Webサーバはすべての HTTP リクエストに応えます。処理できない場合でも、エラーメッセージを返す必要があります。</li>
</ul>
<p><a href="/ja/docs/Web/HTTP/Status/404"><img alt="エラーページの例として、 MDN の 404 ページ" src="https://mdn.mozillademos.org/files/8661/mdn-404.jpg" style="float: right; height: 300px; width: 300px;"></a>Webサーバにおいて、 HTTP サーバは受信したリクエストを処理してレスポンスを返す責任があります。</p>
<ol>
<li>リクエストを受信すると、 HTTP サーバは最初にリクエストされた URL が既存のファイルに一致するかどうかをチェックします。</li>
<li>もしあれば、Webサーバはブラウザーにファイルを送り返します。なければ、アプリケーションサーバが必要なファイルを作成します。</li>
<li>どちらの処理もできない場合、Webサーバは {{HTTPStatus("404", "404 Not Found")}} としてよく知られているエラーメッセージをブラウザーに返します。 (このエラーはよく起こるので、多くのWebデザイナーが、<a href="http://www.404notfound.fr/" rel="external">404 エラーページ</a>のデザインに時間を割くことになります。)</li>
</ol>
<h3 id="Static_vs._dynamic_content" name="Static_vs._dynamic_content">動的コンテンツと静的コンテンツ</h3>
<p>大まかに言って、サーバは静的コンテンツと動的コンテンツのどちらかを提供することができます。「静的」は「そのまま提供する」という意味です。静的なWebサイトは構築するのが最も簡単なので、最初に静的サイトを作成することをお勧めします。</p>
<p>「動的」はサーバがコンテンツを処理したり、データベースからその場で作成したりすることを意味します。この方法は、柔軟なページを提供できる反面、技術的難易度が高く、Webサイトの構築が複雑になります。</p>
<p>例を挙げれば、今あなたが見ているページがそれです。この Web サーバには、データベースから記事コンテンツを取り出し、整形し、HTML テンプレート内に配置し、結果を送信するためのアプリケーションサーバがあります。この場合、アプリケーションサーバは <a href="/ja/docs/MDN/Kuma">Kuma</a> と呼ばれ、 (<a href="https://www.djangoproject.com/">Django</a> フレームワークを使用した) <a href="https://www.python.org/">Python</a> 言語で構築されています。 Mozilla チームは Kuma を MDN の特定のニーズのために作成しましたが、他のたくさんの技術で構築された同様のアプリケーションがたくさんあります。</p>
<p>アプリケーションサーバは多くの種類があり、特定のサーバを選ぶのはとても難しいといえます。あるものは、ブログ、Wiki、 E ショップなどに特殊化しています。いっぽう、 {{Glossary("CMS")}} (Content Management System) と呼ばれるものはより一般的です。動的Webサイトを構築するときは、ニーズに合ったツールの選択に時間をかけましょう。Webサーバプログラミングを学習しようとするのでなければ (これ自体はエキサイティングな領域ですが)、独自のアプリケーションサーバを作成する必要はありません。それは{{Interwiki("wikipedia", "車輪の再発明")}}のような、無用な努力になるからです。</p>
<h2 id="Next_steps" name="Next_steps">次のステップ</h2>
<p>Web サーバのことがよく分かったら、次のステップに進みましょう。</p>
<ul>
<li><a href="/ja/docs/Learn/Common_questions/How_much_does_it_cost">Webで何かをするのにいくらかかるのか</a>を知る</li>
<li><a href="/ja/docs/Learn/Common_questions/What_software_do_I_need">Webサイトを作成するのに必要な様々なソフトウェア</a>についてもっと学ぶ</li>
<li><a href="/ja/docs/Learn/Common_questions/Upload_files_to_a_web_server">ファイルをWebサーバにアップロードするには</a>のような、実践的な記事を読む</li>
</ul>
|