20.20. CGIHTTPServer — CGI対応のHTTPリクエストハンドラー—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/cgihttpserver
移動先:案内検索

20.20。 CGIHTTPServer —CGI対応のHTTPリクエストハンドラ

ノート

CGIHTTPServer モジュールは、Python3のhttp.serverに統合されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。


CGIHTTPServer モジュールは、 BaseHTTPServer.BaseHTTPRequestHandler と互換性のあるインターフェイスであるリクエストハンドラークラスを定義し、 SimpleHTTPServer.SimpleHTTPRequestHandler から動作を継承しますが、CGIスクリプトを実行することもできます。

ノート

このモジュールは、UnixおよびWindowsシステムでCGIスクリプトを実行できます。


ノート

CGIHTTPRequestHandler クラスによって実行されるCGIスクリプトは、CGIスクリプトの実行前にコード200(スクリプト出力が続く)が送信されるため、リダイレクト(HTTPコード302)を実行できません。 これにより、ステータスコードが横取りされます。


CGIHTTPServer モジュールは、次のクラスを定義します。

class CGIHTTPServer.CGIHTTPRequestHandler(request, client_address, server)

このクラスは、現在のディレクトリ以下のCGIスクリプトのファイルまたは出力を提供するために使用されます。 HTTP階層構造をローカルディレクトリ構造にマッピングすることは、 SimpleHTTPServer.SimpleHTTPRequestHandler とまったく同じであることに注意してください。

ただし、クラスがCGIスクリプトであると推測した場合、クラスはファイルとして提供するのではなく、CGIスクリプトを実行します。 ディレクトリベースのCGIのみが使用されます—他の一般的なサーバー構成は、特別な拡張機能をCGIスクリプトを示すものとして扱うことです。

do_GET()およびdo_HEAD()関数は、要求がcgi_directoriesパスの下のどこかにある場合、ファイルを提供する代わりに、CGIスクリプトを実行して出力を提供するように変更されています。

CGIHTTPRequestHandler は、次のデータメンバーを定義します。

cgi_directories

これはデフォルトで['/cgi-bin', '/htbin']に設定され、CGIスクリプトを含むものとして扱うディレクトリを記述します。

CGIHTTPRequestHandler は、次のメソッドを定義します。

do_POST()

このメソッドは'POST'リクエストタイプを提供し、CGIスクリプトでのみ許可されます。 非CGIURLにPOSTしようとすると、エラー501「CGIスクリプトにのみPOSTできます」が出力されます。

セキュリティ上の理由から、CGIスクリプトはユーザーnobodyのUIDで実行されることに注意してください。 CGIスクリプトの問題は、エラー403に変換されます。

使用例については、 test()関数の実装を参照してください。

も参照してください

モジュール BaseHTTPServer
Webサーバーとリクエストハンドラーの基本クラスの実装。