WEBWEB
EnvironmentsEnvironments
nasa9084nasa9084
自己紹介自己紹介
名前
北村壮大 : Masahiro Kitamura
HN : nasa9084
所属
北海道大学
工学部
情報エレクトロニクス学科
コンピュータサイエンスコース
情報認識学研究室
ServerServer
何らかのサービスを提供するソフトウェア何らかのサービスを提供するソフトウェア
Web Server
Application Server
Mail Server
Database Server
FTP Server
Proxy Server
今回はHTTP ServerとApplication Serverが登場
Web ServerWeb Server
クライアントからのHTTPリクエストに対してHTTPレスポンスでリソースを返す
→HTTP Server
図にすると図にすると
代表的なHTTP Server代表的なHTTP Server
Application ServerApplication Server
アプリケーションを呼び出して仕事をしてくれる
HTTPの復習HTTPの復習
クライアントがリクエストメッセージをサーバに送る
サーバがレスポンスメッセージをクライアントに返す
メッセージメッセージ
ヘッダとボディで構成される
テキスト
CGICGI
Common Gateway Interface
Web Serverでプログラムを動かす仕組み
動作動作
リクエストを受け取る1.
CGIプログラムを起動する2.
CGIプログラムが結果を返す3.
クライアントにレスポンスを返す4.
標準入出力標準入出力
HTTPリクエストのボディは標準入力へ
標準出力は そのまま クライアントに送られる
環境変数(environment variable)環境変数(environment variable)
OS上のタスクがデータを共有するための変数
QUERY_STRING
クライアントが要求したURIのうち、検索文字列部
CONTENT_LENGTH
クライアントからのHTTPリクエストのボディ部の長さ
PATH_INFO
CGIプログラムに対応する仮想パスの後ろに続いた余分のパス
PATH_TRANSLATED
PATH_INFOを物理パスに対応させたもの
WSGIWSGI
Web Server Gateway Interface
Python WebアプリケーションとWeb Serverを接続するための標準仕様
今は昔今は昔
Python Webアプリケーションの実装方法Python Webアプリケーションの実装方法
CGI
FastCGI
mod_python
統一したい!
WSGIの誕生WSGIの誕生
動作動作
リクエストを受け取る1.
アプリケーションのエントリポイントをcallする2.
アプリケーションの返り値を使ってレスポンスを作る3.
callcall
WSGIアプリケーションはcallableオブジェクトを持つ
→コレを呼び出す
callableオブジェクトcallableオブジェクト
callable == 呼び出し可能
hoge()のような形
関数
__call__が定義されたクラス
アプリケーション引数アプリケーション引数
環境変数(env)1.
start_responseオブジェクト2.
start_responseオブジェクトstart_responseオブジェクト
ステータスコードやHTTPレスポンスヘッダを入れる
→コレをもとにサーバがレスポンスをつくる
ボディボディ
iterableオブジェクトの形で返す
iterableiterable
iterable == 反復可能
list
tuple
dict
RackRack
Ruby用の仕様Ruby用の仕様
Rubyの人が思ったRubyの人が思った
"WSGIいいな。。。""WSGIいいな。。。"
Rackの誕生Rackの誕生
動作動作
リクエストを受け取る1.
アプリケーションのエントリポイントをcallする2.
アプリケーションの返り値でレスポンスを作る3.
アプリケーション引数アプリケーション引数
環境変数(env)
アプリケーションの返り値アプリケーションの返り値
ステータスコード(status)
HTTPヘッダ(headers)
ボディ(body)
→3つまとめて配列にして返す
PSGIPSGI
Perl Web Server Gateway Interface
Perl用Perl用
Perlの人が思ったPerlの人が思った
"WSGIとかRackとかいいな。。。""WSGIとかRackとかいいな。。。"
PSGIの誕生PSGIの誕生
動作動作
大体Rackと同じ大体Rackと同じ
Web三層構成Web三層構成
THANK YOUTHANK YOU

Web Environments