Fixed #27345 -- Stopped setting the Date header in ConditionalGetMiddleware.

This commit is contained in:
Tim Graham 2016-10-14 08:02:19 -04:00
parent b679a3cdb1
commit 61f9243e51
4 changed files with 8 additions and 12 deletions

View File

@ -2,7 +2,7 @@ from django.utils.cache import (
cc_delim_re, get_conditional_response, set_response_etag, cc_delim_re, get_conditional_response, set_response_etag,
) )
from django.utils.deprecation import MiddlewareMixin from django.utils.deprecation import MiddlewareMixin
from django.utils.http import http_date, parse_http_date_safe from django.utils.http import parse_http_date_safe
class ConditionalGetMiddleware(MiddlewareMixin): class ConditionalGetMiddleware(MiddlewareMixin):
@ -12,10 +12,9 @@ class ConditionalGetMiddleware(MiddlewareMixin):
If-Modified-Since, the response is replaced by an HttpNotModified. An ETag If-Modified-Since, the response is replaced by an HttpNotModified. An ETag
header is added if needed. header is added if needed.
Also sets the Date and Content-Length response-headers. Also sets the Content-Length response-header.
""" """
def process_response(self, request, response): def process_response(self, request, response):
response['Date'] = http_date()
if not response.streaming and not response.has_header('Content-Length'): if not response.streaming and not response.has_header('Content-Length'):
response['Content-Length'] = str(len(response.content)) response['Content-Length'] = str(len(response.content))

View File

@ -181,11 +181,12 @@ header, the middleware adds one if needed. If the response has a ``ETag`` or
``If-Modified-Since``, the response is replaced by an ``If-Modified-Since``, the response is replaced by an
:class:`~django.http.HttpResponseNotModified`. :class:`~django.http.HttpResponseNotModified`.
Also sets the ``Date`` and ``Content-Length`` response-headers. Also sets ``Content-Length`` response-header.
.. versionchanged:: 1.11 .. versionchanged:: 1.11
In older versions, the middleware didn't set the ``ETag`` header. In older versions, the middleware set the ``Date`` header and didn't set
the ``ETag`` header.
Locale middleware Locale middleware
----------------- -----------------

View File

@ -559,6 +559,9 @@ Miscellaneous
* In the admin templates, ``<p class="help">`` is replaced with a ``<div>`` tag * In the admin templates, ``<p class="help">`` is replaced with a ``<div>`` tag
to allow including lists inside help text. to allow including lists inside help text.
* ``ConditionalGetMiddleware`` no longer sets the ``Date`` header as Web
servers set that header.
.. _deprecated-features-1.11: .. _deprecated-features-1.11:
Features deprecated in 1.11 Features deprecated in 1.11

View File

@ -478,13 +478,6 @@ class ConditionalGetMiddlewareTest(SimpleTestCase):
self.req = RequestFactory().get('/') self.req = RequestFactory().get('/')
self.resp = self.client.get(self.req.path_info) self.resp = self.client.get(self.req.path_info)
# Tests for the Date header
def test_date_header_added(self):
self.assertNotIn('Date', self.resp)
self.resp = ConditionalGetMiddleware().process_response(self.req, self.resp)
self.assertIn('Date', self.resp)
# Tests for the Content-Length header # Tests for the Content-Length header
def test_content_length_header_added(self): def test_content_length_header_added(self):