diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d87f6693..fab0700f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,9 @@ Changelog for Django-Fiber 1.7 (unreleased) ---------------- -- Nothing changed yet. +- Reset 'Content-Length' header in AdminPageMiddleware and + ObfuscateEmailAddressMiddleware to make sure clients read + the full response. 1.6.1 (2019-10-17) diff --git a/fiber/middleware.py b/fiber/middleware.py index 979a9f0b..ca24aab6 100644 --- a/fiber/middleware.py +++ b/fiber/middleware.py @@ -131,6 +131,10 @@ def modify_response(self, request, response): 'fiber_data': escape(json.dumps(fiber_data, sort_keys=True)) } response.content = self.body_re.sub(replacement, content) + if response.has_header('Content-Length'): + # Reset 'Content-Length' header (usually set by CommonMiddleware) + # to make sure clients read the full response body + response['Content-Length'] = str(len(response.content)) return response def is_django_admin(self, request): @@ -169,6 +173,10 @@ def process_response(self, request, response): email_pattern = re.compile( r'\b(?P(mailto:)?[\w-]+(\.[\w-]+)*(\+[\w-]+)?@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]+)))\b') response.content = email_pattern.sub(self.replace_email, force_text(response.content)) + if response.has_header('Content-Length'): + # Reset 'Content-Length' header (usually set by CommonMiddleware) + # to make sure clients read the full response body + response['Content-Length'] = str(len(response.content)) return response def replace_email(self, matches):