Web Environments

44
WEB WEB Environments Environments nasa9084 nasa9084

Transcript of Web Environments

WEBWEBEnvironmentsEnvironments

nasa9084nasa9084

自己紹介自己紹介名前

北村壮大 : Masahiro KitamuraHN : nasa9084

所属

北海道大学

工学部

情報エレクトロニクス学科

コンピュータサイエンスコース

情報認識学研究室

ServerServer

何らかのサービスを提供するソフトウェア何らかのサービスを提供するソフトウェア

Web ServerApplication ServerMail ServerDatabase ServerFTP ServerProxy Server

今回はHTTP ServerとApplication Serverが登場

Web ServerWeb ServerクライアントからのHTTPリクエストに対してHTTPレスポンスでリソースを返す

→HTTP Server

図にすると図にすると

代表的なHTTP Server代表的なHTTP Server

Application ServerApplication Serverアプリケーションを呼び出して仕事をしてくれる

HTTPの復習HTTPの復習クライアントがリクエストメッセージをサーバに送る

サーバがレスポンスメッセージをクライアントに返す

メッセージメッセージ

ヘッダとボディで構成される

テキスト

CGICGICommon Gateway Interface

Web Serverでプログラムを動かす仕組み

動作動作

リクエストを受け取る1. CGIプログラムを起動する2. CGIプログラムが結果を返す3. クライアントにレスポンスを返す4.

標準入出力標準入出力

HTTPリクエストのボディは標準入力へ標準出力はそのまま クライアントに送られる

環境変数(environment variable)環境変数(environment variable)OS上のタスクがデータを共有するための変数

QUERY_STRINGクライアントが要求したURIのうち、検索文字列部

CONTENT_LENGTHクライアントからのHTTPリクエストのボディ部の長さ

PATH_INFOCGIプログラムに対応する仮想パスの後ろに続いた余分のパス

PATH_TRANSLATEDPATH_INFOを物理パスに対応させたもの

WSGIWSGIWeb Server Gateway Interface

Python WebアプリケーションとWeb Serverを接続するための標準仕様

今は昔今は昔

Python Webアプリケーションの実装方法Python Webアプリケーションの実装方法CGIFastCGImod_python

統一したい!

WSGIの誕生WSGIの誕生

動作動作

リクエストを受け取る1. アプリケーションのエントリポイントをcallする2. アプリケーションの返り値を使ってレスポンスを作る3.

callcallWSGIアプリケーションはcallableオブジェクトを持つ

→コレを呼び出す

callableオブジェクトcallableオブジェクトcallable == 呼び出し可能

hoge()のような形

関数

__call__が定義されたクラス

アプリケーション引数アプリケーション引数

環境変数(env)1. start_responseオブジェクト2.

start_responseオブジェクトstart_responseオブジェクトステータスコードやHTTPレスポンスヘッダを入れる

→コレをもとにサーバがレスポンスをつくる

ボディボディ

iterableオブジェクトの形で返す

iterableiterableiterable == 反復可能

listtupledict

RackRack

Ruby用の仕様Ruby用の仕様

Rubyの人が思ったRubyの人が思った

"WSGIいいな。。。""WSGIいいな。。。"

Rackの誕生Rackの誕生

動作動作

リクエストを受け取る1. アプリケーションのエントリポイントをcallする2. アプリケーションの返り値でレスポンスを作る3.

アプリケーション引数アプリケーション引数

環境変数(env)

アプリケーションの返り値アプリケーションの返り値

ステータスコード(status)HTTPヘッダ(headers)ボディ(body)

→3つまとめて配列にして返す

PSGIPSGIPerl Web Server Gateway Interface

Perl用Perl用

Perlの人が思ったPerlの人が思った

"WSGIとかRackとかいいな。。。""WSGIとかRackとかいいな。。。"

PSGIの誕生PSGIの誕生

動作動作

大体Rackと同じ大体Rackと同じ

Web三層構成Web三層構成

THANK YOUTHANK YOU