From: Sebastián Ramírez Date: Mon, 24 Jun 2019 22:03:49 +0000 (+0200) Subject: :recycle: Make 307 the default redirect status code X-Git-Tag: 0.12.2~4^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F563%2Fhead;p=thirdparty%2Fstarlette.git :recycle: Make 307 the default redirect status code respecting HTTP method, and use 308 for HTTPS redirects (equivalently for 301) --- 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/"