Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions Doc/library/http.server.rst
Original file line number Diff line number Diff line change
Expand Up @@ -335,11 +335,14 @@ provides three different variants:

.. attribute:: 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,
A dictionary mapping suffixes into MIME types, contains custom overrides
for the default system mappings. The mapping is used case-insensitively,
and so should contain only lower-cased keys.

.. versionchanged:: 3.9
This dictionary is no longer filled with the default system mappings,
but only contains overrides.

.. attribute:: directory

If not specified, the directory to serve is the current working directory.
Expand Down
23 changes: 10 additions & 13 deletions Lib/http/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,12 @@ class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
"""

server_version = "SimpleHTTP/" + __version__
extensions_map = _encodings_map_default = {
'.gz': 'application/gzip',
'.Z': 'application/octet-stream',
'.bz2': 'application/x-bzip2',
'.xz': 'application/x-xz',
}

def __init__(self, *args, directory=None, **kwargs):
if directory is None:
Expand Down Expand Up @@ -866,25 +872,16 @@ def guess_type(self, path):
slow) to look inside the data to make a better guess.

"""

base, ext = posixpath.splitext(path)
if ext in self.extensions_map:
return self.extensions_map[ext]
ext = ext.lower()
if ext in self.extensions_map:
return self.extensions_map[ext]
else:
return self.extensions_map['']

if not mimetypes.inited:
mimetypes.init() # try to read system mime.types
extensions_map = mimetypes.types_map.copy()
extensions_map.update({
'': 'application/octet-stream', # Default
'.py': 'text/plain',
'.c': 'text/plain',
'.h': 'text/plain',
})
guess, _ = mimetypes.guess_type(path)
if guess:
return guess
return 'application/octet-stream'


# Utilities for CGIHTTPRequestHandler
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Proxy the `SimpleHTTPRequestHandler.guess_type` to `mimetypes.guess_type` so the `mimetypes.init` is called lazily to avoid unnecessary costs when :mod:`http.server` module is imported.