mirror of https://github.com/django/django.git
Fixed #27346 -- Stopped setting the Content-Length header in ConditionalGetMiddleware.
This commit is contained in:
parent
c7dddc01d6
commit
37809b891e
1
AUTHORS
1
AUTHORS
|
@ -9,6 +9,7 @@ answer newbie questions, and generally made Django that much better:
|
||||||
Aaron Swartz <http://www.aaronsw.com/>
|
Aaron Swartz <http://www.aaronsw.com/>
|
||||||
Aaron T. Myers <atmyers@gmail.com>
|
Aaron T. Myers <atmyers@gmail.com>
|
||||||
Adam Johnson <https://github.com/adamchainz>
|
Adam Johnson <https://github.com/adamchainz>
|
||||||
|
Adam Malinowski <http://adammalinowski.co.uk>
|
||||||
Adam Vandenberg
|
Adam Vandenberg
|
||||||
Adrian Holovaty <adrian@holovaty.com>
|
Adrian Holovaty <adrian@holovaty.com>
|
||||||
Adrien Lemaire <lemaire.adrien@gmail.com>
|
Adrien Lemaire <lemaire.adrien@gmail.com>
|
||||||
|
|
|
@ -11,13 +11,8 @@ class ConditionalGetMiddleware(MiddlewareMixin):
|
||||||
Last-Modified header, and the request has If-None-Match or
|
Last-Modified header, and the request has If-None-Match or
|
||||||
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 Content-Length response-header.
|
|
||||||
"""
|
"""
|
||||||
def process_response(self, request, response):
|
def process_response(self, request, response):
|
||||||
if not response.streaming and not response.has_header('Content-Length'):
|
|
||||||
response['Content-Length'] = str(len(response.content))
|
|
||||||
|
|
||||||
# It's too late to prevent an unsafe request with a 412 response, and
|
# It's too late to prevent an unsafe request with a 412 response, and
|
||||||
# for a HEAD request, the response body is always empty so computing
|
# for a HEAD request, the response body is always empty so computing
|
||||||
# an accurate ETag isn't possible.
|
# an accurate ETag isn't possible.
|
||||||
|
|
|
@ -181,12 +181,10 @@ 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 ``Content-Length`` response-header.
|
|
||||||
|
|
||||||
.. versionchanged:: 1.11
|
.. versionchanged:: 1.11
|
||||||
|
|
||||||
In older versions, the middleware set the ``Date`` header and didn't set
|
In older versions, the middleware set the ``Content-Length`` and ``Date``
|
||||||
the ``ETag`` header.
|
headers and didn't set the ``ETag`` header.
|
||||||
|
|
||||||
Locale middleware
|
Locale middleware
|
||||||
-----------------
|
-----------------
|
||||||
|
|
|
@ -579,8 +579,10 @@ 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
|
* :class:`~django.middleware.http.ConditionalGetMiddleware` no longer sets the
|
||||||
servers set that header.
|
``Date`` header as Web servers set that header. It also no longer sets the
|
||||||
|
``Content-Length`` header as this is now done by
|
||||||
|
:class:`~django.middleware.common.CommonMiddleware`.
|
||||||
|
|
||||||
* :meth:`~django.apps.AppConfig.get_model` and
|
* :meth:`~django.apps.AppConfig.get_model` and
|
||||||
:meth:`~django.apps.AppConfig.get_models` now raise
|
:meth:`~django.apps.AppConfig.get_models` now raise
|
||||||
|
|
|
@ -478,30 +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 Content-Length header
|
|
||||||
|
|
||||||
def test_content_length_header_added(self):
|
|
||||||
content_length = len(self.resp.content)
|
|
||||||
# Already set by CommonMiddleware, remove it to check that
|
|
||||||
# ConditionalGetMiddleware readds it.
|
|
||||||
del self.resp['Content-Length']
|
|
||||||
self.assertNotIn('Content-Length', self.resp)
|
|
||||||
self.resp = ConditionalGetMiddleware().process_response(self.req, self.resp)
|
|
||||||
self.assertIn('Content-Length', self.resp)
|
|
||||||
self.assertEqual(int(self.resp['Content-Length']), content_length)
|
|
||||||
|
|
||||||
def test_content_length_header_not_added(self):
|
|
||||||
resp = StreamingHttpResponse('content')
|
|
||||||
self.assertNotIn('Content-Length', resp)
|
|
||||||
resp = ConditionalGetMiddleware().process_response(self.req, resp)
|
|
||||||
self.assertNotIn('Content-Length', resp)
|
|
||||||
|
|
||||||
def test_content_length_header_not_changed(self):
|
|
||||||
bad_content_length = len(self.resp.content) + 10
|
|
||||||
self.resp['Content-Length'] = bad_content_length
|
|
||||||
self.resp = ConditionalGetMiddleware().process_response(self.req, self.resp)
|
|
||||||
self.assertEqual(int(self.resp['Content-Length']), bad_content_length)
|
|
||||||
|
|
||||||
# Tests for the ETag header
|
# Tests for the ETag header
|
||||||
|
|
||||||
def test_middleware_calculates_etag(self):
|
def test_middleware_calculates_etag(self):
|
||||||
|
|
Loading…
Reference in New Issue