diff --git a/AUTHORS b/AUTHORS index c058559787..044391e4a3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -908,6 +908,7 @@ answer newbie questions, and generally made Django that much better: Roel Delos Reyes Rohith P R Romain Garrigues + Ronan LE HAY Ronnie van den Crommenacker Ronny Haryanto Ross Poulton diff --git a/django/middleware/common.py b/django/middleware/common.py index bf22d00f01..870d462e6d 100644 --- a/django/middleware/common.py +++ b/django/middleware/common.py @@ -105,7 +105,9 @@ class CommonMiddleware(MiddlewareMixin): # If the given URL is "Not Found", then check if we should redirect to # a path with a slash appended. if response.status_code == 404 and self.should_redirect_with_slash(request): - return self.response_redirect_class(self.get_full_path_with_slash(request)) + response = self.response_redirect_class( + self.get_full_path_with_slash(request) + ) # Add the Content-Length header to non-streaming responses if not # already set. diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py index 2e796ecfc7..c4aac0552b 100644 --- a/tests/middleware/tests.py +++ b/tests/middleware/tests.py @@ -350,6 +350,19 @@ class CommonMiddlewareTest(SimpleTestCase): response = CommonMiddleware(get_response)(self.rf.get("/")) self.assertEqual(int(response.headers["Content-Length"]), bad_content_length) + @override_settings(APPEND_SLASH=True) + def test_content_length_header_added_to_append_slash_redirect(self): + """ + The Content-Length header is set when redirecting with the APPEND_SLASH + setting. + """ + request = self.rf.get("/customurlconf/slash") + request.urlconf = "middleware.extra_urls" + r = CommonMiddleware(get_response_404)(request) + self.assertEqual(r.status_code, 301) + self.assertEqual(r.url, "/customurlconf/slash/") + self.assertTrue(r.has_header("Content-Length")) + # Other tests @override_settings(DISALLOWED_USER_AGENTS=[re.compile(r"foo")])