Web

Webシステム

投稿日:2021年6月28日 更新日:


ネットワークを使ったシステムは、クライアント/サーバ型システムが基本です。クライアント/サーバ型システムとは、ユーザが操作するクライアントと、データを管理し、処理を実行するサーバとの間をネットワークでつなぎ、複数のクライアントからの処理を一つのサーバでリアルタイムに処理するシステムです。

Webシステムも、クライアント/サーバ型システムです。クライアント/サーバ型システムと比較した特徴は、サーバ側とクライアント側で処理を分散して実行するリッチクライアントではなく、サーバ側だけで処理を集中して実行するWeb技術を使ったシンクライアントである点です。

■Webの基本技術

主なWeb技術について解説します。

・ブラウザ
GUI(Graphic User Interface)を、文章のように自由自在に表示することができるアプリケーションです。画面構成をテキストで定義できるHTML/CSSを解釈し、GUIを描画します。また、GUI上の処理をプログラミングするスクリプト言語であるJavascriptのインタプリタを持ちます。

クライアント/サーバ型システムにおいて、クライアントのGUIは、あらかじめ固定で作り込まれた画面構成や遷移しか持てませんでした。さらに、GUIを作る作業はC/C++などのプログラミング言語を操るプログラマーにしかできませんでした。ブラウザによって、この制限がなくなり、GUIは誰でもできるものとなったのです。

・Webサーバ
クライアント/サーバ型システムと同様に、DBなどの処理を実行するだけではなく、HTML/CSS、JavaScriptを管理するアプリケーションです。

GUIは、クライアント側で動作します。したがって、クライアント/サーバ型システムでは、クライアントにGUIプログラムを配置しておく必要がありました。しかし、Webシステムでは、HTML/CSS、JavaScriptなどをサーバ側で保持します。クライアントは、表示するHTML/CSS、JavaScriptを画面を遷移する度にWebサーバから取得します。

Webサーバ側では、ブラウザに画面を返却する間に、処理を実行します。
クライアント/サーバ型システムと同様に、Webサーバにはデータベースを連結し、データを一元管理できる構成とすることが一般的です。
画面遷移に従って、データベースへアクセスし、必要なデータを更新、取得し、結果を返す処理を実施します。

Webサーバ内で処理を実行するプログラムをCGI(Common Gateway Interface)といいます。Webアプリケーションサーバとは、Webサーバの機能とCGIをPHP、Ruby、VB、Pythonなどのスクリプト言語でプログラミング可能とする機能を環境をパッケージ化したソフトウェアのことです。
これによって、CGIを一般的なアプリケーションと同じようにプログラミングすることができます。

このようなWebアプリケーションをつくる上でわかりにくいのは、クライアント/サーバ型システムで、クライアント側で実施していた処理も含めてサーバ側で実施されることです。

クライアント/サーバ型システムのプログラムを開発するためのアーキテクチャとして、以下の「MVCモデル」があります。

 [Model]
 アプリケーションで扱うデータ構造を定義し、各種データへのアクセスを実現する層

 [View]
 画面を描画(表示)するための層

 [Control]
 画面から入力されたデータとモデルで管理されたデータを使って、処理を実行する層。クライアント側とサーバ側の制御プログラムに相当

Webシステムでは、Modelがデータベース、ViewがHTML/CSS/JavaScript、ControlがCGIなどのWebアプリケーションに相当します。


・HTTPプロトコル
ブラウザとWebサーバをネットワークを介して通信する手順です。詳細は、RFC7230(Request For Comments 7230)というドキュメントに記載されていて、インターネットで公開されています。HTTPプロトコルには、ブラウザからWebサーバへ送信するリクエスト、それに対応したWebサーバからブラウザに送信するレスポンスの2つのパケットしかありません。これらは、文字列によって、パケットのヘッダが定義され、データには、文字列だけでなく、バイナリ、画像や音声なども送受信できます。

[リクエスト]

メソッド   HTTPリクエストの種類
 URI     Webサーバ内のCGIのパス名
データ種類 Content-Type
 データ長  Content-Length
データ  リクエストの引数など

(例)
POST /web_search/index.php HTTP/1.1
Host: zip.cgis.biz
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 45

para1=2110004&para2=abc


[レスポンス]
 
 結果 HTTPリクエストの結果
 データ種類 Content-Type
 データ長  Content-Length
データ   CGIの処理結果  

(例)
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 2893

<html>
<head>
・・・・
</head>
<body>
・・・・
</body>
</html>


HTTPプロトコルは、TCP/IP上で動作するプロトコルです。原則、ブラウザは、リクエストを送信する前に、WebサーバにTCPで接続します。Webサーバからレスポンスを受信したら切断します。

ブラウザの画面を操作・遷移する度に、この手順を繰り返し、Webサーバ側で処理を実行します。その結果、一連の処理を完結させることができます。

■インターネット上でWebサーバを動作させる準備

Webサーバを配置するネットワーク環境には、イントラネットとインターネットの2つがあります。

イントラネットとは、ある会社・組織だけ、ある居室内だけというように、通信する範囲が限定されているネットワーク環境のことです。そこで使われるIPアドレスは自由に決めることができますので、WebサーバのIPアドレスもあらかじめ決めておくことができます。したがって、ブラウザからWebサーバのIPアドレスとポート番号を指定すれば、Webサーバとつなげることができます。

しかし、インターネットは、公衆網であり、IPアドレスを勝手にふることはできません。

Webサーバをインターネットにつなげる目的は、2つあります。一つ目は、外部の情報を受け取るためと、二つ目は、外部へ情報を発信するためです。これらをするには、インターネットに参加するための準備が必要となります。

①グローバルアドレス
インターネットサービスプロバイダからIPアドレスを購入し、割り当ててもらう必要があります。グローバルアドレスがないと、インターネット上でデータを送受信することができません。

②ドメイン名
グローバルアドレスに対応した「階層名」を取得する必要があります。階層とは、最上位を国として、組織、個人など、社会的・経済的な集団の規模の序列です。メールサーバやWebサーバをインターネット上に設置する場合、ドメイン名が必要となります。

これらを準備するには、仲介者としてISP(インターネットサービスプロバイダ)を選び、グローバルアドレスとドメイン名を入手することになります。

■Webシステムの構築

インターネット上でWebサーバを稼働させるには、インターネットに接続するための以下の周辺を揃えて、Webシステム化する必要があります。

1)名前解決のためのDNS(Domain Name System)

ドメイン名からIPアドレスに変換することを名前解決といいます。他の人がブラウザを使って、立ち上げたWebサーバのドメイン名をIPアドレスに変換してもらうためには、Bind(バインド)というサーバソフトウェアが動作するDNSサーバを自ら立ち上げる必要があります。そして、ドメイン名とそのDNSサーバのIPアドレスを上位のDNSサーバに登録する必要があります。

自分のDNSサーバでは、自ドメイン配下のWebサーバなどのホスト名とIPアドレスを登録することで、名前解決が可能となります。

2)ネットワーク分離のためのファイアウォールとプロキシ

機密情報の漏洩防止など、セキュリティ対策として、インターネットとイントラネットの間は、物理的にも、論理的にも壁を設け、アクセスの制限をかける必要があります。

まず、物理的な壁として、ファイアウォールというネットワーク機器を使い、インターネットとイントラネット間で流れるパケットを遮断します。そして、必要なパケットだけを通すように、ファイアウォールでフィルタリングを実施します。

イントラネット上にあるパソコンなどに付与されたローカルのIPアドレスは、隠蔽すべき機密情報です。インターネットからの不正アクセスのターゲットとなるからです。そのため、ブラウザからインターネットのWebサーバにアクセスする場合、プロキシというサーバソフトウェアを使って、代理のIPアドレスに変換します。

3)中継用DNSサーバ

ブラウザからインターネットのWebサイトにアクセスする場合にも、ドメイン名からIPアドレスの名前解決が必要となります。そのため、1)のDNSサーバとは別に、中継用DNSサーバを設けます。中継用DNSサーバは、他のドメインのDNSサーバへのアクセスを行い、名前解決を実施します。その際、過去の名前解決の結果を、キャッシュに保存します。これによって、名前解決の処理時間を短縮できます。

4)中継用メールサーバ

社内のメールをやりとりするために、メールサーバはイントラネット内に設置されます。しかし、社外とのメールをやりとりするためには、インターネット上に中継用メールサーバを置く必要があります。社内のメールを社外へ転送したり、逆に、社外のメールを社内に転送するだけで、メールを保管するようなことはしません。

中継用メールサーバには、専用のドメイン名が必要です。Webサーバと同じようにDNSサーバに登録しておきます。

また、ファイアウォールを専用のネットワーク機器で、LANインタフェースを2つ持つパソコンを使って構築することで、プロキシ、中継用DNSサーバ、中継用メールサーバはファイアウォール上で動作させることができます。

-Web

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

Flask(Python)

WebアプリケーションをPythonを使って手軽に開発できるマイクロフレームワークがFlaskです。Webアプリケーション開発と言えばPHPがありますが、Flaskの最大の特徴は、プログラミング言語の …

スクレイピング

インターネットにあるWebサイトのHTMLデータの中から、必要なデータを自動的に取得することをスクレイピングといいます。Googleなどの検索エンジンがインデックスを作成するために、自動でWebサイト …

決済API(PAY.JPの例)

EC(電子商取引)などインターネットを使ったサービスが増える中、取引の決済処理を担う決済APIも多種多様になってきています。それら決済APIについて、解説します。 ■ 決済APIとは何か 代表的な決済 …

GCPでのWebサービスの作り方(Python、Flask、MYSQL、Mail、Apache) 1/2

GCP(Google Cloud Platform)上で、Webサービスを立ち上げるポイントを整理します。オンプレミス(自前でネインターネット接続環境やサーバを調達してシステムを構築)でWebサービス …

Zoom REST API

リモート会議を開催するとき、アプリケーションのZoomを使われてる人も多いと思います。Zoomには、Pythonによってプログラミング可能なWeb-APIであるREST APIが用意されています。この …