webプログラムの仕組み
クライアントサイド
ユーザーのwebブラウザ上のクリックや文字入力に応じて即座に画面上の表示やデータの変更を行う。
サーバーサイド
webブラウザからのリクエストに応じて、情報をサーバーに保存したりユーザ個別の情報を表示する
1. クライアントサイド + サーバーサイド
- ログインフォームからサイトにログインする流れ
- クライアントサイドでフォームの入力をチェックする。誤脱があればサブミット処理を行わない。
- サーバーサイドでは、主な処理としてログイン認証処理を行う。しかしサーバー側でも入力チェックは必ず行う。
2. サーバーサイドの管理画面 + 静的HTML
- ブログ管理画面に文章を記述すると、それを元に静的HTMLが生成される
- サーバーサイドプログラムでwebsサイトの管理機能を作成
- ユーザーが閲覧するHTMLファイルを出力する
3. サーバーサイドによる管理画面 + サーバーサイド画面
- ECサイトの管理画面とショッピング画面
- webサイトの管理機能がサーバーサイドに存在する。(カメラ,値段10000円,在庫10個など)
- 上記の記録を元に、ユーザーが閲覧する画面が動的に生成される。
サーバーサイドプログラミング
サーバーサイドで動作するプログラムは、ユーザーからのリクエストを受けたwebサーバーから呼び出され動的にwebページを生成して送信する。普通のwebサイトなどでは、あらかじめ作成されたファイルをリクエストに応じてそのまま表示するが、サーバーサイドプログラミングではその場でwebページのファイルを生成し、リクエストを返す。動的にwebページを生成して送信する方法には、CGI方式とApacheモジュール方式の2パターンがある。
CGI方式
- 「ユーザーからのリクエスト→プロセスの起動(Apache)→プロセスの実行(CGI)→プロセスの終了」と行った一連の流れを持つ。webサーバとは別プロセスで起動し、ユーザーからのリクエストを受けてプロセスを実行するたびに、プロセスの起動と終了を行う。webサーバとは別で起動するので、多くのユーザとシェアをするレンタルサーバなどでよく利用される。
Apacheモジュール方式
-
Apacheはモージュルと呼ばれる小さなプログラムの集合体。その中に、サーバーサイドのプログラミングの実行環境を組み込むことで、Apacheのプロセスから直接プログラムの実行を行う。結果処理速度が速くなる。
-
Apacheとは
- webサービスを提供するソフトウェアのこと。サーバ用コンピュータにインストールし、サーバとして利用するためのソフトウェア。
1. FastCGI方式
- CGI方式では毎回プロセスの生成と破棄が行われるため処理効率が悪くなる。FastCGIでは一度起動したCGIプロセスをメモリ内に永続化させることでプロセスを再利用している。
2. セッション変数
ステートレス
- webブラウザからのリクエストに対して、レスポンスを返した段階でプログラムを終了させる。サーバ側では保持すべき状態が残らない。情婦を複数画面で維持することはできない。
ステートフル
- ユーザの入力情報を複数画面に渡って維持する仕組みのこと。情報の維持のためにセッション変数が利用される。
セッション変数
- アクセスしたユーザ一人一人に付与する、状態を保持する特別な変数を付与。
- サーバに保存されたセッション変数はセッションキーと呼ばれるランダムな文字を使って呼び出せる。このセッションキーをCookieに保存することで複数の画面にまたがっても情報の保持ができる。URLの後ろに付与することでセッション維持する仕組みもある。
セッション変数の問題点
- セッションキーが漏洩することでユーザー情報の漏洩が生じる。セッションキーが漏洩しない仕組みづくりが必要となる。
サーバーサイドのプログラミング言語
PHP
- テキスト処理得意とし、webに特化した機能が標準で盛り込まれている
- HTMLにプログラムコードを埋め込むスタイル。
Perl
- CGIが流行した時の代表的なプログラミング言語。
- 多くのレンタルサーバで簡単に利用できる。
Ruby
- 国産のプログラミング言語
- オブジェクト指向プログラミング
Java Servlet
- servletコンテナと呼ばれるJavaによって作られたアプリケーションサーバ上で動作する。
- パフォーマンスや安定性に優れ、決済システムなど高信頼性が求められるシステムに幅広く利用されている。
データベース
サーバサイドでファイルを保存したり管理者にメールで送信することがある(データ情報や入力内容を保存するため)。大量の情報や再訪問時にユーザに表示する情報を保存する場合は、主にデータベースシステムを利用する。
リレーショナルデータベース(RDBMS)
- データベースのシステムはデータの読み書きや情報の集計、検索などを簡単な手続きで行える。
- RDBMSはデータベースシステムの代表的なもので、表形式のデータ構造を持つ
- 表と表はキーというデータを指し示す情報によって関係性を持つように設計されている。
データベースをコントロールするSQL文
- テーブル同士の関係性を元に必要な情報を検索したり情報を保存したりするなど、データベースを操作する処理はSQL文を利用して行う。
プログラミング言語からデータベースに接続する方
- 言語ごとに用意されているライブラリを利用して通信を行う。(Rubyの場合、mysql.rb)
Webプログラムに利用される主なDB
- MySQL
- Oracle Database
- SQLite
HTML以外に動的生成可能なデータ
画像やRSS、Flashなどを動的生成することもできる。
Content-Type
- クライアントにデータを送信する場合、データの種類を判別する場合にHTTPプロトコルに定められたContent-Typeヘッダを通じてファイルの種類を示す。
MYMEType
- データの種類を示す識別子のこと。Content-typeは項目のことで、MYMETypeは値そのもの。「Content-Type : text/plain」のようなもの。
静的ページでwebサーバからファイルをダウンロードする場合は、ファイルの拡張子を元にwebサーバが適切にMYMETypeをContent-Typeヘッダに付与するが、動的ページの場合はwebプログラムで設定する必要がある。