mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
	
	
		
			87 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			87 lines
		
	
	
	
		
			3.4 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								:mod:`SimpleHTTPServer` --- Simple HTTP request handler
							 | 
						||
| 
								 | 
							
								=======================================================
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. module:: SimpleHTTPServer
							 | 
						||
| 
								 | 
							
								   :synopsis: This module provides a basic request handler for HTTP servers.
							 | 
						||
| 
								 | 
							
								.. sectionauthor:: Moshe Zadka <moshez@zadka.site.co.il>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The :mod:`SimpleHTTPServer` module defines a request-handler class,
							 | 
						||
| 
								 | 
							
								interface-compatible with :class:`BaseHTTPServer.BaseHTTPRequestHandler`, that
							 | 
						||
| 
								 | 
							
								serves files only from a base directory.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The :mod:`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
							 | 
						||
| 
								 | 
							
								   :class:`BaseHTTPServer.BaseHTTPRequestHandler`.  This class implements the
							 | 
						||
| 
								 | 
							
								   :func:`do_GET` and :func:`do_HEAD` functions.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The :class:`SimpleHTTPRequestHandler` defines the following member variables:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. attribute:: SimpleHTTPRequestHandler.server_version
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is defined
							 | 
						||
| 
								 | 
							
								   in the module.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. attribute:: SimpleHTTPRequestHandler.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 :class:`SimpleHTTPRequestHandler` defines the following methods:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. method:: SimpleHTTPRequestHandler.do_HEAD()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   This method serves the ``'HEAD'`` request type: it sends the headers it would
							 | 
						||
| 
								 | 
							
								   send for the equivalent ``GET`` request. See the :meth:`do_GET` method for a
							 | 
						||
| 
								 | 
							
								   more complete explanation of the possible headers.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. method:: SimpleHTTPRequestHandler.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
							 | 
						||
| 
								 | 
							
								   :meth:`list_directory` method. This method uses :func:`os.listdir` to scan the
							 | 
						||
| 
								 | 
							
								   directory, and returns a ``404`` error response if the :func:`listdir` fails.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   If the request was mapped to a file, it is opened and the contents are returned.
							 | 
						||
| 
								 | 
							
								   Any :exc:`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 :meth:`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 :func:`test` function.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   .. versionadded:: 2.5
							 | 
						||
| 
								 | 
							
								      The ``'Last-Modified'`` header.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								.. seealso::
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								   Module :mod:`BaseHTTPServer`
							 | 
						||
| 
								 | 
							
								      Base class implementation for Web server and request handler.
							 | 
						||
| 
								 | 
							
								
							 |