From 5d076961e285a74d3d5aeae88a52517c38c44846 Mon Sep 17 00:00:00 2001 From: Georg Brandl Date: Fri, 17 Feb 2006 13:34:16 +0000 Subject: Patch #1417555: SimpleHTTPServer now returns Last-Modified headers. --- Doc/lib/libbasehttp.tex | 11 ++++++++--- Doc/lib/libsimplehttp.tex | 7 ++++++- Lib/BaseHTTPServer.py | 7 ++++--- Lib/SimpleHTTPServer.py | 4 +++- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/Doc/lib/libbasehttp.tex b/Doc/lib/libbasehttp.tex index fe794f8..64c069f 100644 --- a/Doc/lib/libbasehttp.tex +++ b/Doc/lib/libbasehttp.tex @@ -217,11 +217,16 @@ Returns the server software's version string. This is a combination of the \member{server_version} and \member{sys_version} class variables. \end{methoddesc} -\begin{methoddesc}{date_time_string}{} -Returns the current date and time, formatted for a message header. +\begin{methoddesc}{date_time_string}{\optional{timestamp}} +Returns the date and time given by \var{timestamp} (which must be in the +format returned by \function{time.time()}), formatted for a message header. +If \var{timestamp} is omitted, it uses the current date and time. + +The result looks like \code{'Sun, 06 Nov 1994 08:49:37 GMT'}. +\versionadded[The \var{timestamp} parameter]{2.5} \end{methoddesc} -\begin{methoddesc}{log_data_time_string}{} +\begin{methoddesc}{log_date_time_string}{} Returns the current date and time, formatted for logging. \end{methoddesc} diff --git a/Doc/lib/libsimplehttp.tex b/Doc/lib/libsimplehttp.tex index c30eaa8..efb40ec 100644 --- a/Doc/lib/libsimplehttp.tex +++ b/Doc/lib/libsimplehttp.tex @@ -65,13 +65,18 @@ error. Otherwise, the content type is guessed by calling the \var{extensions_map} variable. A \code{'Content-type:'} header with the guessed content type is -output, followed by a blank line signifying the end of the headers, +output, followed by a \code{'Content-Length:'} header with the file's +size and a \code{'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 \code{text/} the file is opened in text mode; otherwise binary mode is used. For example usage, see the implementation of the \function{test()} function. +\versionadded[The \code{'Last-Modified'} header]{2.5} \end{methoddesc} diff --git a/Lib/BaseHTTPServer.py b/Lib/BaseHTTPServer.py index 722b50c..1b3d4db 100644 --- a/Lib/BaseHTTPServer.py +++ b/Lib/BaseHTTPServer.py @@ -436,10 +436,11 @@ class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler): """Return the server software version string.""" return self.server_version + ' ' + self.sys_version - def date_time_string(self): + def date_time_string(self, timestamp=None): """Return the current date and time formatted for a message header.""" - now = time.time() - year, month, day, hh, mm, ss, wd, y, z = time.gmtime(now) + if timestamp is None: + timestamp = time.time() + year, month, day, hh, mm, ss, wd, y, z = time.gmtime(timestamp) s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % ( self.weekdayname[wd], day, self.monthname[month], year, diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py index ea10fb7..089936f 100644 --- a/Lib/SimpleHTTPServer.py +++ b/Lib/SimpleHTTPServer.py @@ -85,7 +85,9 @@ class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler): return None self.send_response(200) self.send_header("Content-type", ctype) - self.send_header("Content-Length", str(os.fstat(f.fileno())[6])) + fs = os.fstat(f.fileno()) + self.send_header("Content-Length", str(fs[6])) + self.send_header("Last-Modified", self.date_time_string(fs.st_mtime)) self.end_headers() return f -- cgit v0.12