# 18.20 `SimpleHTTPServer` -- Simple HTTP request handler

The `SimpleHTTPServer` module defines a request-handler class, interface-compatible with `BaseHTTPServer.BaseHTTPRequestHandler`, that serves files only from a base directory.

The `SimpleHTTPServer` module defines the following class:

class `SimpleHTTPRequestHandler`( | request, client_address, server)

  This class is used to serve files from the current directory and below, directly mapping the directory structure to HTTP requests.

  A lot of the work, such as parsing the request, is done by the base class `BaseHTTPServer.BaseHTTPRequestHandler`. This class implements the `do_GET()` and `do_HEAD()` functions.

The `SimpleHTTPRequestHandler` defines the following member variables:

`server_version`
  This will be `"SimpleHTTP/" + __version__`, where `__version__` is defined in the module.

`extensions_map`
  A dictionary mapping suffixes into MIME types. The default is signified by an empty string, and is considered to be `application/octet-stream`. The mapping is used case-insensitively, and so should contain only lower-cased keys.

The `SimpleHTTPRequestHandler` defines the following methods:

`do_HEAD`( | )

  This method serves the `'HEAD'` request type: it sends the headers it would send for the equivalent `GET` request. See the `do_GET()` method for a more complete explanation of the possible headers.

`do_GET`( | )

  The request is mapped to a local file by interpreting the request as a path relative to the current working directory.

  If the request was mapped to a directory, the directory is checked for a file named `index.html` or `index.htm` (in that order). If found, the file's contents are returned; otherwise a directory listing is generated by calling the `list_directory()` method. This method uses `os.listdir()` to scan the directory, and returns a `404` error response if the `listdir()` fails.

  If the request was mapped to a file, it is opened and the contents are returned. Any `IOError` exception in opening the requested file is mapped to a `404`, `'File not found'` error. Otherwise, the content type is guessed by calling the `guess_type()` method, which in turn uses the extensions_map variable.

  A `'Content-type:'` header with the guessed content type is output, followed by a `'Content-Length:'` header with the file's size and a `'Last-Modified:'` header with the file's modification time.

  Then follows a blank line signifying the end of the headers, and then the contents of the file are output. If the file's MIME type starts with `text/` the file is opened in text mode; otherwise binary mode is used.

  For example usage, see the implementation of the `test()` function. New in version 2.5: The `'Last-Modified'` header.

See Also:

Module `BaseHTTPServer`:
  Base class implementation for Web server and request handler.