Fixed #17552 -- Removed a hack for IE6 and earlier.

It prevented the GZipMiddleware from compressing some data types even on
more recent version of IE where the corresponding bug was fixed.

Thanks Aaron Cannon for the report and Tim Graham for the review.
This commit is contained in:
Aymeric Augustin 2014-06-09 21:24:05 +02:00
parent fea8ccdcc4
commit df09d85482
4 changed files with 6 additions and 22 deletions

View File

@ -17,17 +17,11 @@ class GZipMiddleware(object):
if not response.streaming and len(response.content) < 200: if not response.streaming and len(response.content) < 200:
return response return response
patch_vary_headers(response, ('Accept-Encoding',))
# Avoid gzipping if we've already got a content-encoding. # Avoid gzipping if we've already got a content-encoding.
if response.has_header('Content-Encoding'): if response.has_header('Content-Encoding'):
return response return response
# MSIE have issues with gzipped response of various content types. patch_vary_headers(response, ('Accept-Encoding',))
if "msie" in request.META.get('HTTP_USER_AGENT', '').lower():
ctype = response.get('Content-Type', '').lower()
if not ctype.startswith("text/") or "javascript" in ctype:
return response
ae = request.META.get('HTTP_ACCEPT_ENCODING', '') ae = request.META.get('HTTP_ACCEPT_ENCODING', '')
if not re_accepts_gzip.search(ae): if not re_accepts_gzip.search(ae):

View File

@ -108,11 +108,6 @@ It will NOT compress content if any of the following are true:
* The request (the browser) hasn't sent an ``Accept-Encoding`` header * The request (the browser) hasn't sent an ``Accept-Encoding`` header
containing ``gzip``. containing ``gzip``.
* The request is from Internet Explorer and the ``Content-Type`` header
contains ``javascript`` or starts with anything other than ``text/``.
We do this to avoid a bug in early versions of IE that caused decompression
not to be performed on certain content types.
You can apply GZip compression to individual views using the You can apply GZip compression to individual views using the
:func:`~django.views.decorators.gzip.gzip_page()` decorator. :func:`~django.views.decorators.gzip.gzip_page()` decorator.

View File

@ -273,6 +273,11 @@ Miscellaneous
* Database connections are considered equal only if they're the same object. * Database connections are considered equal only if they're the same object.
They aren't hashable any more. They aren't hashable any more.
* :class:`~django.middleware.gzip.GZipMiddleware` used to disable compression
for some content types when the request is from Internet Explorer, in order
to work around a bug in IE6 and earlier. This behavior could affect
performance on IE7 and later. It was removed.
* ``URLField.to_python`` no longer adds a trailing slash to pathless URLs. * ``URLField.to_python`` no longer adds a trailing slash to pathless URLs.
* ``django.contrib.gis`` dropped support for GEOS 3.1 and GDAL 1.6. * ``django.contrib.gis`` dropped support for GEOS 3.1 and GDAL 1.6.

View File

@ -613,16 +613,6 @@ class GZipMiddlewareTest(TestCase):
self.assertEqual(r.content, self.compressible_string) self.assertEqual(r.content, self.compressible_string)
self.assertEqual(r.get('Content-Encoding'), 'deflate') self.assertEqual(r.get('Content-Encoding'), 'deflate')
def test_no_compress_ie_js_requests(self):
"""
Tests that compression isn't performed on JavaScript requests from Internet Explorer.
"""
self.req.META['HTTP_USER_AGENT'] = 'Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)'
self.resp['Content-Type'] = 'application/javascript; charset=UTF-8'
r = GZipMiddleware().process_response(self.req, self.resp)
self.assertEqual(r.content, self.compressible_string)
self.assertEqual(r.get('Content-Encoding'), None)
def test_no_compress_uncompressible_response(self): def test_no_compress_uncompressible_response(self):
""" """
Tests that compression isn't performed on responses with uncompressible content. Tests that compression isn't performed on responses with uncompressible content.