From 3f702238247c99089eac76880965b32bd050f3cb Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebasti=C3=A1n=20Ram=C3=ADrez?= Date: Tue, 25 Jun 2019 00:03:49 +0200 Subject: [PATCH] :recycle: Make 307 the default redirect status code respecting HTTP method, and use 308 for HTTPS redirects (equivalently for 301) --- starlette/middleware/httpsredirect.py | 2 +- starlette/responses.py | 2 +- tests/middleware/test_https_redirect.py | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/starlette/middleware/httpsredirect.py b/starlette/middleware/httpsredirect.py index 13f3a70a..7f646ed3 100644 --- a/starlette/middleware/httpsredirect.py +++ b/starlette/middleware/httpsredirect.py @@ -13,7 +13,7 @@ class HTTPSRedirectMiddleware: redirect_scheme = {"http": "https", "ws": "wss"}[url.scheme] netloc = url.hostname if url.port in (80, 443) else url.netloc url = url.replace(scheme=redirect_scheme, netloc=netloc) - response = RedirectResponse(url, status_code=301) + response = RedirectResponse(url, status_code=308) await response(scope, receive, send) else: await self.app(scope, receive, send) diff --git a/starlette/responses.py b/starlette/responses.py index 13982db5..a755d247 100644 --- a/starlette/responses.py +++ b/starlette/responses.py @@ -161,7 +161,7 @@ class UJSONResponse(JSONResponse): class RedirectResponse(Response): def __init__( - self, url: typing.Union[str, URL], status_code: int = 302, headers: dict = None + self, url: typing.Union[str, URL], status_code: int = 307, headers: dict = None ) -> None: super().__init__(content=b"", status_code=status_code, headers=headers) self.headers["location"] = quote_plus(str(url), safe=":/%#?&=@[]!$&'()*+,;") diff --git a/tests/middleware/test_https_redirect.py b/tests/middleware/test_https_redirect.py index 15f1e3fe..6a81ed30 100644 --- a/tests/middleware/test_https_redirect.py +++ b/tests/middleware/test_https_redirect.py @@ -19,20 +19,20 @@ def test_https_redirect_middleware(): client = TestClient(app) response = client.get("/", allow_redirects=False) - assert response.status_code == 301 + assert response.status_code == 308 assert response.headers["location"] == "https://testserver/" client = TestClient(app, base_url="http://testserver:80") response = client.get("/", allow_redirects=False) - assert response.status_code == 301 + assert response.status_code == 308 assert response.headers["location"] == "https://testserver/" client = TestClient(app, base_url="http://testserver:443") response = client.get("/", allow_redirects=False) - assert response.status_code == 301 + assert response.status_code == 308 assert response.headers["location"] == "https://testserver/" client = TestClient(app, base_url="http://testserver:123") response = client.get("/", allow_redirects=False) - assert response.status_code == 301 + assert response.status_code == 308 assert response.headers["location"] == "https://testserver:123/" -- 2.47.2