20.20. CGIHTTPServer
— CGI 実行機能付き HTTP リクエスト処理機構¶
注釈
BaseHTTPServer
モジュールは Python 3 では http.server
に統合されました。ソースコードを 3 用に変換する時は、 2to3 ツールが自動的に import を修正します。
CGIHTTPServer
モジュールでは、 BaseHTTPServer.BaseHTTPRequestHandler
互換のインタフェースを持ち、 SimpleHTTPServer.SimpleHTTPRequestHandler
の動作を継承していますが CGI スクリプトを動作することもできる、 HTTP リクエストハンドラクラスを定義しています。
注釈
このモジュールは CGI スクリプトを Unix および Windows システム上で実行させることができます。
注釈
CGIHTTPRequestHandler
クラスで実行される CGI スクリプトは HTTP コード 200 (スクリプトの出力が後に続く) を実行に先立って出力される (これがステータスコードになります) ため、リダイレクト(コード302) を行なうことができません。
CGIHTTPServer
モジュールでは、以下のクラスを定義しています:
-
class
CGIHTTPServer.
CGIHTTPRequestHandler
(request, client_address, server)¶ このクラスは、現在のディレクトリかその下のディレクトリにおいて、ファイルか CGI スクリプト出力を提供するために使われます。 HTTP 階層構造からローカルなディレクトリ構造への対応付けは
SimpleHTTPServer.SimpleHTTPRequestHandler
と全く同じなので注意してください。このクラスでは、ファイルが CGI スクリプトであると推測された場合、これをファイルとして提供する代わりにスクリプトを実行します。 — 他の一般的なサーバ設定は特殊な拡張子を使って CGI スクリプトであることを示すのに対し、ディレクトリベースの CGI だけが使われます。
do_GET()
およびdo_HEAD()
関数は、HTTP 要求がcgi_directories
パス以下のどこかを指している場合、ファイルを提供するのではなく、CGI スクリプトを実行してその出力を提供するように変更されています。CGIHTTPRequestHandler
では以下のデータメンバを定義しています:-
cgi_directories
¶ この値は標準で
['/cgi-bin', '/htbin']
であり、CGI スクリプトを含んでいることを示すディレクトリを記述します。
CGIHTTPRequestHandler
では以下のメソッドを定義しています:-
do_POST
()¶ このメソッドは、CGI スクリプトでのみ許されている
'POST'
型の HTTP 要求に対するサービスを行います。CGI でない url に対して POST を試みた場合、出力は Error 501, "Can only POST to CGI scripts" になります。
-
セキュリティ上の理由から、CGI スクリプトはユーザ nobody の UID で動作するので注意してください。 CGI スクリプトが原因で発生した問題は、Error 403 に変換されます。
使用例については、 test()
関数の実装を参照してください。
参考
BaseHTTPServer
モジュール- Web サーバとリクエスト処理機構を実装した基底クラスです。