]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
:recycle: Make 307 the default redirect status code 563/head
authorSebastián Ramírez <tiangolo@gmail.com>
Mon, 24 Jun 2019 22:03:49 +0000 (00:03 +0200)
committerSebastián Ramírez <tiangolo@gmail.com>
Mon, 24 Jun 2019 22:03:49 +0000 (00:03 +0200)
respecting HTTP method, and use 308 for HTTPS redirects (equivalently for 301)

starlette/middleware/httpsredirect.py
starlette/responses.py
tests/middleware/test_https_redirect.py

index 13f3a70a6254cae77c7dcab684180df5c8044415..7f646ed3e9b16107bdbcf09cd199e1cb68f6632e 100644 (file)
@@ -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)
index 13982db582434ac850986da289acd8a018ee0eb8..a755d247567052df556785c9bb810ae5da83f63d 100644 (file)
@@ -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=":/%#?&=@[]!$&'()*+,;")
index 15f1e3fe05cf69892cefb4663832fd2eaa324051..6a81ed30f26b0c677c26d7a2aa1f0cc5e3cc549c 100644 (file)
@@ -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/"