blob: 0d8e7fe6c77c3aa3f1295d56180d656e23900286 [file] [log] [blame]
Georg Brandl24420152008-05-26 16:32:26 +00001:mod:`http.server` --- HTTP servers
2===================================
3
4.. module:: http.server
5 :synopsis: HTTP server and request handlers.
6
7
8.. index::
9 pair: WWW; server
10 pair: HTTP; protocol
11 single: URL
12 single: httpd
13
Raymond Hettinger469271d2011-01-27 20:38:46 +000014**Source code:** :source:`Lib/http/server.py`
15
16--------------
17
Georg Brandl24420152008-05-26 16:32:26 +000018This module defines classes for implementing HTTP servers (Web servers).
19
20One class, :class:`HTTPServer`, is a :class:`socketserver.TCPServer` subclass.
21It creates and listens at the HTTP socket, dispatching the requests to a
22handler. Code to create and run the server looks like this::
23
24 def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
25 server_address = ('', 8000)
26 httpd = server_class(server_address, handler_class)
27 httpd.serve_forever()
28
29
30.. class:: HTTPServer(server_address, RequestHandlerClass)
31
Serhiy Storchakabfdcd432013-10-13 23:09:14 +030032 This class builds on the :class:`~socketserver.TCPServer` class by storing
33 the server address as instance variables named :attr:`server_name` and
Georg Brandl24420152008-05-26 16:32:26 +000034 :attr:`server_port`. The server is accessible by the handler, typically
35 through the handler's :attr:`server` instance variable.
36
37
38The :class:`HTTPServer` must be given a *RequestHandlerClass* on instantiation,
39of which this module provides three different variants:
40
41.. class:: BaseHTTPRequestHandler(request, client_address, server)
42
43 This class is used to handle the HTTP requests that arrive at the server. By
44 itself, it cannot respond to any actual HTTP requests; it must be subclassed
45 to handle each request method (e.g. GET or POST).
46 :class:`BaseHTTPRequestHandler` provides a number of class and instance
47 variables, and methods for use by subclasses.
48
49 The handler will parse the request and the headers, then call a method
50 specific to the request type. The method name is constructed from the
51 request. For example, for the request method ``SPAM``, the :meth:`do_SPAM`
52 method will be called with no arguments. All of the relevant information is
53 stored in instance variables of the handler. Subclasses should not need to
54 override or extend the :meth:`__init__` method.
55
56 :class:`BaseHTTPRequestHandler` has the following instance variables:
57
58 .. attribute:: client_address
59
60 Contains a tuple of the form ``(host, port)`` referring to the client's
61 address.
62
Benjamin Peterson3e4f0552008-09-02 00:31:15 +000063 .. attribute:: server
64
65 Contains the server instance.
66
67
Georg Brandl24420152008-05-26 16:32:26 +000068 .. attribute:: command
69
70 Contains the command (request type). For example, ``'GET'``.
71
72 .. attribute:: path
73
74 Contains the request path.
75
76 .. attribute:: request_version
77
78 Contains the version string from the request. For example, ``'HTTP/1.0'``.
79
80 .. attribute:: headers
81
82 Holds an instance of the class specified by the :attr:`MessageClass` class
83 variable. This instance parses and manages the headers in the HTTP
Senthil Kumarancad2bf22014-04-16 13:56:19 -040084 request. The :func:`~http.client.parse_headers` function from
85 :mod:`http.client` is used to parse the headers and it requires that the
86 HTTP request provide a valid :rfc:`2822` style header.
87
Georg Brandl24420152008-05-26 16:32:26 +000088
89 .. attribute:: rfile
90
91 Contains an input stream, positioned at the start of the optional input
92 data.
93
94 .. attribute:: wfile
95
96 Contains the output stream for writing a response back to the
97 client. Proper adherence to the HTTP protocol must be used when writing to
98 this stream.
99
100 :class:`BaseHTTPRequestHandler` has the following class variables:
101
102 .. attribute:: server_version
103
104 Specifies the server software version. You may want to override this. The
105 format is multiple whitespace-separated strings, where each string is of
106 the form name[/version]. For example, ``'BaseHTTP/0.2'``.
107
108 .. attribute:: sys_version
109
110 Contains the Python system version, in a form usable by the
111 :attr:`version_string` method and the :attr:`server_version` class
112 variable. For example, ``'Python/1.4'``.
113
114 .. attribute:: error_message_format
115
116 Specifies a format string for building an error response to the client. It
117 uses parenthesized, keyed format specifiers, so the format operand must be
118 a dictionary. The *code* key should be an integer, specifying the numeric
119 HTTP error code value. *message* should be a string containing a
120 (detailed) error message of what occurred, and *explain* should be an
121 explanation of the error code number. Default *message* and *explain*
R David Murraya475a8d2014-01-03 13:03:00 -0500122 values can found in the :attr:`responses` class variable.
Georg Brandl24420152008-05-26 16:32:26 +0000123
124 .. attribute:: error_content_type
125
126 Specifies the Content-Type HTTP header of error responses sent to the
127 client. The default value is ``'text/html'``.
128
129 .. attribute:: protocol_version
130
131 This specifies the HTTP protocol version used in responses. If set to
132 ``'HTTP/1.1'``, the server will permit HTTP persistent connections;
133 however, your server *must* then include an accurate ``Content-Length``
134 header (using :meth:`send_header`) in all of its responses to clients.
135 For backwards compatibility, the setting defaults to ``'HTTP/1.0'``.
136
137 .. attribute:: MessageClass
138
Georg Brandl83e9f4c2008-06-12 18:52:31 +0000139 Specifies an :class:`email.message.Message`\ -like class to parse HTTP
140 headers. Typically, this is not overridden, and it defaults to
141 :class:`http.client.HTTPMessage`.
Georg Brandl24420152008-05-26 16:32:26 +0000142
143 .. attribute:: responses
144
145 This variable contains a mapping of error code integers to two-element tuples
146 containing a short and long message. For example, ``{code: (shortmessage,
147 longmessage)}``. The *shortmessage* is usually used as the *message* key in an
148 error response, and *longmessage* as the *explain* key (see the
149 :attr:`error_message_format` class variable).
150
151 A :class:`BaseHTTPRequestHandler` instance has the following methods:
152
153 .. method:: handle()
154
155 Calls :meth:`handle_one_request` once (or, if persistent connections are
156 enabled, multiple times) to handle incoming HTTP requests. You should
157 never need to override it; instead, implement appropriate :meth:`do_\*`
158 methods.
159
160 .. method:: handle_one_request()
161
162 This method will parse and dispatch the request to the appropriate
163 :meth:`do_\*` method. You should never need to override it.
164
Senthil Kumaran0f476d42010-09-30 06:09:18 +0000165 .. method:: handle_expect_100()
166
167 When a HTTP/1.1 compliant server receives a ``Expect: 100-continue``
168 request header it responds back with a ``100 Continue`` followed by ``200
169 OK`` headers.
170 This method can be overridden to raise an error if the server does not
171 want the client to continue. For e.g. server can chose to send ``417
172 Expectation Failed`` as a response header and ``return False``.
173
174 .. versionadded:: 3.2
175
Senthil Kumaran26886442013-03-15 07:53:21 -0700176 .. method:: send_error(code, message=None, explain=None)
Georg Brandl24420152008-05-26 16:32:26 +0000177
178 Sends and logs a complete error reply to the client. The numeric *code*
R David Murraya475a8d2014-01-03 13:03:00 -0500179 specifies the HTTP error code, with *message* as an optional, short, human
180 readable description of the error. The *explain* argument can be used to
181 provide more detailed information about the error; it will be formatted
182 using the :attr:`error_message_format` class variable and emitted, after
183 a complete set of headers, as the response body. The :attr:`responses`
184 class variable holds the default values for *message* and *explain* that
185 will be used if no value is provided; for unknown codes the default value
186 for both is the string ``???``.
Georg Brandl24420152008-05-26 16:32:26 +0000187
Senthil Kumaran52d27202012-10-10 23:16:21 -0700188 .. versionchanged:: 3.4
189 The error response includes a Content-Length header.
Ezio Melotti2acd2932013-03-16 22:23:30 +0200190 Added the *explain* argument.
Senthil Kumaran26886442013-03-15 07:53:21 -0700191
Senthil Kumaran52d27202012-10-10 23:16:21 -0700192
Georg Brandl036490d2009-05-17 13:00:36 +0000193 .. method:: send_response(code, message=None)
Georg Brandl24420152008-05-26 16:32:26 +0000194
Senthil Kumaranc7ae19b2011-05-09 23:25:02 +0800195 Adds a response header to the headers buffer and logs the accepted
Senthil Kumarancc995282011-05-11 16:04:28 +0800196 request. The HTTP response line is written to the internal buffer,
197 followed by *Server* and *Date* headers. The values for these two headers
198 are picked up from the :meth:`version_string` and
199 :meth:`date_time_string` methods, respectively. If the server does not
200 intend to send any other headers using the :meth:`send_header` method,
Ezio Melottie9c7d6c2011-05-12 01:10:57 +0300201 then :meth:`send_response` should be followed by a :meth:`end_headers`
202 call.
Senthil Kumarancc995282011-05-11 16:04:28 +0800203
Ezio Melottie9c7d6c2011-05-12 01:10:57 +0300204 .. versionchanged:: 3.3
205 Headers are stored to an internal buffer and :meth:`end_headers`
206 needs to be called explicitly.
Senthil Kumarancc995282011-05-11 16:04:28 +0800207
Georg Brandl24420152008-05-26 16:32:26 +0000208
209 .. method:: send_header(keyword, value)
210
Senthil Kumaranc7ae19b2011-05-09 23:25:02 +0800211 Adds the HTTP header to an internal buffer which will be written to the
Senthil Kumaran6ea17a82011-05-11 11:45:48 +0800212 output stream when either :meth:`end_headers` or :meth:`flush_headers` is
213 invoked. *keyword* should specify the header keyword, with *value*
214 specifying its value. Note that, after the send_header calls are done,
215 :meth:`end_headers` MUST BE called in order to complete the operation.
Senthil Kumarane4dad4f2010-11-21 14:36:14 +0000216
Georg Brandl61063cc2012-06-24 22:48:30 +0200217 .. versionchanged:: 3.2
218 Headers are stored in an internal buffer.
Senthil Kumarane4dad4f2010-11-21 14:36:14 +0000219
Georg Brandl24420152008-05-26 16:32:26 +0000220
Senthil Kumaran0f476d42010-09-30 06:09:18 +0000221 .. method:: send_response_only(code, message=None)
222
223 Sends the reponse header only, used for the purposes when ``100
Senthil Kumarane4dad4f2010-11-21 14:36:14 +0000224 Continue`` response is sent by the server to the client. The headers not
225 buffered and sent directly the output stream.If the *message* is not
226 specified, the HTTP message corresponding the response *code* is sent.
Senthil Kumaran0f476d42010-09-30 06:09:18 +0000227
228 .. versionadded:: 3.2
229
Georg Brandl24420152008-05-26 16:32:26 +0000230 .. method:: end_headers()
231
Senthil Kumaranc7ae19b2011-05-09 23:25:02 +0800232 Adds a blank line
233 (indicating the end of the HTTP headers in the response)
Ezio Melottie9c7d6c2011-05-12 01:10:57 +0300234 to the headers buffer and calls :meth:`flush_headers()`.
Senthil Kumarane4dad4f2010-11-21 14:36:14 +0000235
Ezio Melottie9c7d6c2011-05-12 01:10:57 +0300236 .. versionchanged:: 3.2
237 The buffered headers are written to the output stream.
Georg Brandl24420152008-05-26 16:32:26 +0000238
Senthil Kumaranc7ae19b2011-05-09 23:25:02 +0800239 .. method:: flush_headers()
240
241 Finally send the headers to the output stream and flush the internal
242 headers buffer.
243
244 .. versionadded:: 3.3
245
Georg Brandl036490d2009-05-17 13:00:36 +0000246 .. method:: log_request(code='-', size='-')
Georg Brandl24420152008-05-26 16:32:26 +0000247
248 Logs an accepted (successful) request. *code* should specify the numeric
249 HTTP code associated with the response. If a size of the response is
250 available, then it should be passed as the *size* parameter.
251
252 .. method:: log_error(...)
253
254 Logs an error when a request cannot be fulfilled. By default, it passes
255 the message to :meth:`log_message`, so it takes the same arguments
256 (*format* and additional values).
257
258
259 .. method:: log_message(format, ...)
260
261 Logs an arbitrary message to ``sys.stderr``. This is typically overridden
262 to create custom error logging mechanisms. The *format* argument is a
263 standard printf-style format string, where the additional arguments to
264 :meth:`log_message` are applied as inputs to the formatting. The client
Senthil Kumarandb727b42012-04-29 13:41:03 +0800265 ip address and current date and time are prefixed to every message logged.
Georg Brandl24420152008-05-26 16:32:26 +0000266
267 .. method:: version_string()
268
269 Returns the server software's version string. This is a combination of the
270 :attr:`server_version` and :attr:`sys_version` class variables.
271
Georg Brandl036490d2009-05-17 13:00:36 +0000272 .. method:: date_time_string(timestamp=None)
Georg Brandl24420152008-05-26 16:32:26 +0000273
Georg Brandl036490d2009-05-17 13:00:36 +0000274 Returns the date and time given by *timestamp* (which must be None or in
275 the format returned by :func:`time.time`), formatted for a message
276 header. If *timestamp* is omitted, it uses the current date and time.
Georg Brandl24420152008-05-26 16:32:26 +0000277
278 The result looks like ``'Sun, 06 Nov 1994 08:49:37 GMT'``.
279
280 .. method:: log_date_time_string()
281
282 Returns the current date and time, formatted for logging.
283
284 .. method:: address_string()
285
Senthil Kumaran1aacba42012-04-29 12:51:54 +0800286 Returns the client address.
287
288 .. versionchanged:: 3.3
289 Previously, a name lookup was performed. To avoid name resolution
290 delays, it now always returns the IP address.
Georg Brandl24420152008-05-26 16:32:26 +0000291
292
293.. class:: SimpleHTTPRequestHandler(request, client_address, server)
294
295 This class serves files from the current directory and below, directly
296 mapping the directory structure to HTTP requests.
297
298 A lot of the work, such as parsing the request, is done by the base class
299 :class:`BaseHTTPRequestHandler`. This class implements the :func:`do_GET`
300 and :func:`do_HEAD` functions.
301
302 The following are defined as class-level attributes of
303 :class:`SimpleHTTPRequestHandler`:
304
305 .. attribute:: server_version
306
307 This will be ``"SimpleHTTP/" + __version__``, where ``__version__`` is
308 defined at the module level.
309
310 .. attribute:: extensions_map
311
312 A dictionary mapping suffixes into MIME types. The default is
313 signified by an empty string, and is considered to be
314 ``application/octet-stream``. The mapping is used case-insensitively,
315 and so should contain only lower-cased keys.
316
317 The :class:`SimpleHTTPRequestHandler` class defines the following methods:
318
319 .. method:: do_HEAD()
320
321 This method serves the ``'HEAD'`` request type: it sends the headers it
322 would send for the equivalent ``GET`` request. See the :meth:`do_GET`
323 method for a more complete explanation of the possible headers.
324
325 .. method:: do_GET()
326
327 The request is mapped to a local file by interpreting the request as a
328 path relative to the current working directory.
329
330 If the request was mapped to a directory, the directory is checked for a
331 file named ``index.html`` or ``index.htm`` (in that order). If found, the
332 file's contents are returned; otherwise a directory listing is generated
333 by calling the :meth:`list_directory` method. This method uses
334 :func:`os.listdir` to scan the directory, and returns a ``404`` error
Serhiy Storchakabfdcd432013-10-13 23:09:14 +0300335 response if the :func:`~os.listdir` fails.
Georg Brandl24420152008-05-26 16:32:26 +0000336
337 If the request was mapped to a file, it is opened and the contents are
Antoine Pitrou62ab10a02011-10-12 20:10:51 +0200338 returned. Any :exc:`OSError` exception in opening the requested file is
Georg Brandl24420152008-05-26 16:32:26 +0000339 mapped to a ``404``, ``'File not found'`` error. Otherwise, the content
340 type is guessed by calling the :meth:`guess_type` method, which in turn
341 uses the *extensions_map* variable.
342
343 A ``'Content-type:'`` header with the guessed content type is output,
344 followed by a ``'Content-Length:'`` header with the file's size and a
345 ``'Last-Modified:'`` header with the file's modification time.
346
347 Then follows a blank line signifying the end of the headers, and then the
348 contents of the file are output. If the file's MIME type starts with
349 ``text/`` the file is opened in text mode; otherwise binary mode is used.
350
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000351 For example usage, see the implementation of the :func:`test` function
352 invocation in the :mod:`http.server` module.
Georg Brandl24420152008-05-26 16:32:26 +0000353
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000354
Georg Brandl8971f742010-07-02 07:41:51 +0000355The :class:`SimpleHTTPRequestHandler` class can be used in the following
356manner in order to create a very basic webserver serving files relative to
Larry Hastings3732ed22014-03-15 21:13:56 -0700357the current directory::
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000358
Georg Brandl8971f742010-07-02 07:41:51 +0000359 import http.server
360 import socketserver
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000361
Georg Brandl8971f742010-07-02 07:41:51 +0000362 PORT = 8000
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000363
Georg Brandl8971f742010-07-02 07:41:51 +0000364 Handler = http.server.SimpleHTTPRequestHandler
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000365
Georg Brandl8971f742010-07-02 07:41:51 +0000366 httpd = socketserver.TCPServer(("", PORT), Handler)
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000367
Georg Brandl8971f742010-07-02 07:41:51 +0000368 print("serving at port", PORT)
369 httpd.serve_forever()
370
Larry Hastings3732ed22014-03-15 21:13:56 -0700371.. _http-server-cli:
372
Georg Brandlf68798b2010-07-03 10:22:10 +0000373:mod:`http.server` can also be invoked directly using the :option:`-m`
R David Murraye7bade52012-04-11 20:13:25 -0400374switch of the interpreter with a ``port number`` argument. Similar to
Larry Hastings3732ed22014-03-15 21:13:56 -0700375the previous example, this serves files relative to the current directory::
Senthil Kumaran97db43b2010-06-16 16:41:11 +0000376
377 python -m http.server 8000
Georg Brandl24420152008-05-26 16:32:26 +0000378
Larry Hastings3732ed22014-03-15 21:13:56 -0700379By default, server binds itself to all interfaces. The option ``-b/--bind``
380specifies a specific address to which it should bind. For example, the
381following command causes the server to bind to localhost only::
Senthil Kumarandefe7f42013-09-15 09:37:27 -0700382
383 python -m http.server 8000 --bind 127.0.0.1
384
385.. versionadded:: 3.4
386 ``--bind`` argument was introduced.
387
Georg Brandl8971f742010-07-02 07:41:51 +0000388
Georg Brandl24420152008-05-26 16:32:26 +0000389.. class:: CGIHTTPRequestHandler(request, client_address, server)
390
391 This class is used to serve either files or output of CGI scripts from the
392 current directory and below. Note that mapping HTTP hierarchic structure to
393 local directory structure is exactly as in :class:`SimpleHTTPRequestHandler`.
394
395 .. note::
396
397 CGI scripts run by the :class:`CGIHTTPRequestHandler` class cannot execute
398 redirects (HTTP code 302), because code 200 (script output follows) is
399 sent prior to execution of the CGI script. This pre-empts the status
400 code.
401
402 The class will however, run the CGI script, instead of serving it as a file,
403 if it guesses it to be a CGI script. Only directory-based CGI are used ---
404 the other common server configuration is to treat special extensions as
405 denoting CGI scripts.
406
407 The :func:`do_GET` and :func:`do_HEAD` functions are modified to run CGI scripts
408 and serve the output, instead of serving files, if the request leads to
409 somewhere below the ``cgi_directories`` path.
410
411 The :class:`CGIHTTPRequestHandler` defines the following data member:
412
413 .. attribute:: cgi_directories
414
415 This defaults to ``['/cgi-bin', '/htbin']`` and describes directories to
416 treat as containing CGI scripts.
417
418 The :class:`CGIHTTPRequestHandler` defines the following method:
419
420 .. method:: do_POST()
421
422 This method serves the ``'POST'`` request type, only allowed for CGI
423 scripts. Error 501, "Can only POST to CGI scripts", is output when trying
424 to POST to a non-CGI url.
425
426 Note that CGI scripts will be run with UID of user nobody, for security
427 reasons. Problems with the CGI script will be translated to error 403.
Senthil Kumaran1251faf2012-06-03 16:15:54 +0800428
429:class:`CGIHTTPRequestHandler` can be enabled in the command line by passing
Larry Hastings3732ed22014-03-15 21:13:56 -0700430the ``--cgi`` option::
Senthil Kumaran1251faf2012-06-03 16:15:54 +0800431
432 python -m http.server --cgi 8000
433