前のトピックへ

21.18. BaseHTTPServer — 基本的な機能を持つ HTTP サーバ

次のトピックへ

21.20. CGIHTTPServer — CGI 実行機能付き HTTP リクエスト処理機構

このページ

21.19. SimpleHTTPServer — 簡潔な HTTP リクエストハンドラ

ノート

SimpleHTTPServer モジュールは、Python 3では http.server にリネームされました。 2to3 ツールが、ソースコード内のimportを自動的にPython 3用に修正します。

SimpleHTTPServer モジュールは、 SimpleHTTPRequestHandler クラス1つを提供しています。 このクラスは、 BaseHTTPServer.BaseHTTPRequestHandler に対して互換性のあるインタフェースを持っています。

SimpleHTTPServer モジュールでは以下のクラスを定義しています:

class SimpleHTTPServer.SimpleHTTPRequestHandler(request, client_address, server)

このクラスは、現在のディレクトリ以下にあるファイルを、HTTP リクエストにおけるディレクトリ構造に直接対応付けて提供します。

リクエストの解釈のような、多くの作業は基底クラス BaseHTTPServer.BaseHTTPRequestHandler で行われます。 このクラスは関数 do_GET() および do_HEAD() を実装しています。

SimpleHTTPRequestHandler では以下のメンバ変数を定義しています:

server_version

この値は "SimpleHTTP/" + __version__ になります。 __version__ はこのモジュールで定義されている値です。

extensions_map

拡張子を MIME 型指定子に対応付ける辞書です。標準の型指定は空文字列で表され、この値は application/octet-stream と見なされます。対応付けは大小文字の区別をするので、小文字のキーのみを入れるべきです。

SimpleHTTPRequestHandler では以下のメソッドを定義しています:

do_HEAD()

このメソッドは 'HEAD' 型のリクエスト処理を実行します: すなわち、 GET リクエストの時に送信されるものと同じヘッダを送信します。 送信される可能性のあるヘッダについての完全な説明は do_GET() メソッドを参照してください。

do_GET()

リクエストを現在の作業ディレクトリからの相対的なパスとして解釈することで、リクエストをローカルシステム上のファイルと対応付けます。

リクエストがディレクトリに対応付けられた場合、 index.html または index.htm をこの順序でチェックします。 もしファイルを発見できればその内容を、そうでなければディレクトリ一覧を list_directory() メソッドで生成して、返します。 このメソッドは os.listdir() をディレクトリのスキャンに用いており、 listdir() が失敗した場合には 404 応答 が返されます。

リクエストがファイルに対応付けられた場合、そのファイルを開いて内容を返します。要求されたファイルを開く際に何らかの IOError 例外 が送出された場合、リクエストは 404'File not found' エラーに対応づけられます。そうでない場合、コンテントタイプが extensions_map 変数を用いて推測されます。

出力は 'Content-type:' と推測されたコンテントタイプで、その後にファイルサイズを示す 'Content-Lenght;' ヘッダと、ファイルの更新日時を示す 'Last-Modified:' ヘッダが続きます。

そしてヘッダの終了を示す空白行が続き、さらにその後にファイルの内容が続きます。このファイルはコンテントタイプが text/ で始まっている場合 はテキストモードで、そうでなければバイナリモードで開かれます。

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

バージョン 2.5 で追加: 'Last-Modified' ヘッダ.

参考

Module BaseHTTPServer
Web サーバおよび要求ハンドラの基底クラス実装。