18.20 SimpleHTTPServer -- 簡潔な HTTP リクエストハンドラ

SimpleHTTPServer モジュールはリクエストハンドラ (request-handler) クラスを定義しています。インタフェースは BaseHTTPServer.BaseHTTPRequestHandler と互換で、 基底ディレクトリにあるファイルだけを提供します。

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' ヘッダ

参考:

BaseHTTPServer:モジュール
Web サーバおよび要求ハンドラの基底クラス実装。.
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。