Author: jezdez
Date: 2012-02-09 10:57:13 -0800 (Thu, 09 Feb 2012)
New Revision: 17471
Modified:
django/trunk/django/middleware/gzip.py
django/trunk/tests/regressiontests/middleware/tests.py
Log:
Fixed #16035 -- Appended the Etag response header if the GZipMiddleware is in
use to follow RFC2616 better. Thanks, ext and dracos2.
Modified: django/trunk/django/middleware/gzip.py
===================================================================
--- django/trunk/django/middleware/gzip.py 2012-02-09 18:57:06 UTC (rev
17470)
+++ django/trunk/django/middleware/gzip.py 2012-02-09 18:57:13 UTC (rev
17471)
@@ -37,6 +37,9 @@
if len(compressed_content) >= len(response.content):
return response
+ if response.has_header('ETag'):
+ response['ETag'] = re.sub('"$', ';gzip"', response['ETag'])
+
response.content = compressed_content
response['Content-Encoding'] = 'gzip'
response['Content-Length'] = str(len(response.content))
Modified: django/trunk/tests/regressiontests/middleware/tests.py
===================================================================
--- django/trunk/tests/regressiontests/middleware/tests.py 2012-02-09
18:57:06 UTC (rev 17470)
+++ django/trunk/tests/regressiontests/middleware/tests.py 2012-02-09
18:57:13 UTC (rev 17471)
@@ -13,9 +13,9 @@
from django.middleware.common import CommonMiddleware
from django.middleware.http import ConditionalGetMiddleware
from django.middleware.gzip import GZipMiddleware
-from django.test import TestCase
+from django.test import TestCase, RequestFactory
+from django.test.utils import override_settings
-
class CommonMiddlewareTest(TestCase):
def setUp(self):
self.append_slash = settings.APPEND_SLASH
@@ -582,3 +582,32 @@
r = GZipMiddleware().process_response(self.req, self.resp)
self.assertEqual(r.content, self.uncompressible_string)
self.assertEqual(r.get('Content-Encoding'), None)
+
+
+@override_settings(USE_ETAGS=True)
+class ETagGZipMiddlewareTest(TestCase):
+ """
+ Tests if the ETag middleware behaves correctly with GZip middleware.
+ """
+ compressible_string = 'a' * 500
+
+ def setUp(self):
+ self.rf = RequestFactory()
+
+ def test_compress_response(self):
+ """
+ Tests that ETag is changed after gzip compression is performed.
+ """
+ request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate')
+ response = GZipMiddleware().process_response(request,
+ CommonMiddleware().process_response(request,
+ HttpResponse(self.compressible_string)))
+ gzip_etag = response.get('ETag')
+
+ request = self.rf.get('/', HTTP_ACCEPT_ENCODING='')
+ response = GZipMiddleware().process_response(request,
+ CommonMiddleware().process_response(request,
+ HttpResponse(self.compressible_string)))
+ nogzip_etag = response.get('ETag')
+
+ self.assertNotEqual(gzip_etag, nogzip_etag)
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.