diff --git a/resources/tests.py b/resources/tests.py index 4b3f6373..20155dce 100644 --- a/resources/tests.py +++ b/resources/tests.py @@ -196,6 +196,16 @@ def test_etag(self): self.assertEqual( self.get_query("/api/").status_code, 304) + def test_etag_gzip(self): + response = self.client.get("/api/", HTTP_ACCEPT_ENCODING="gzip") + self.assertEqual(response.status_code, 200) + self.assertEqual(response["Content-Encoding"], "gzip") + etag = response["ETag"] + self.assertNotRegexpMatches(etag, ";gzip$") + self.client.defaults["HTTP_IF_NONE_MATCH"] = etag + self.assertEqual( + self.get_query("/api/").status_code, 304) + def test_wookie_renderer(self): wookiee_renderer = WookieeRenderer() translated_data = wookiee_renderer.translate_to_wookie("swapi") diff --git a/swapi/middleware.py b/swapi/middleware.py new file mode 100644 index 00000000..7a721b90 --- /dev/null +++ b/swapi/middleware.py @@ -0,0 +1,5 @@ +class RemoveEtagGzipPostfix(object): + def process_response(self, request, response): + if response.has_header('ETag') and response['ETag'][-6:] == ';gzip"': + response['ETag'] = response['ETag'][:-6] + '"' + return response diff --git a/swapi/settings.py b/swapi/settings.py index 41df3d12..b00f518a 100644 --- a/swapi/settings.py +++ b/swapi/settings.py @@ -34,6 +34,8 @@ ) + CUSTOM_APPS MIDDLEWARE_CLASSES = ( + 'swapi.middleware.RemoveEtagGzipPostfix', + 'django.middleware.gzip.GZipMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware',