관리 메뉴

솜씨좋은장씨

[FastAPI] 307 temporary redirect 해결 방법 (Python) 본문

Programming/Python

[FastAPI] 307 temporary redirect 해결 방법 (Python)

솜씨좋은장씨 2021. 4. 12. 14:57
728x90
반응형

FastAPI로 API를 제작하고 테스트 하면서 

나는 분명히 한 번만 요청했는데 제대로 요청을 받았다는 200OK 응답이 나오기 전에

> 307 temporary redirect

위와 같이 307 temporary redirect 라는 메세지가 한 번 나오고 나서 200OK가 나올 경우가 있습니다.

 

문제의 원인은 본인의 코드에서 endpoint 설정하는 부분을 보면 알 수 있습니다.

@app.post(path="/api/v1/testAPI/", response_model=TestResponse)

endpoint 마지막에 "/" (슬래쉬) 가 붙어 있을 경우 redirect 하도록 되어있기 때문에 발생합니다.

_starlette/routing.py:601_

        if scope["type"] == "http" and self.redirect_slashes:
            if not scope["path"].endswith("/"):
                redirect_scope = dict(scope)
                redirect_scope["path"] += "/"

 

해결방법은 두 가지 입니다.

 

방법 1

본인의 코드에서 endpoint 마지막에 붙어있는 슬래쉬를 지워줍니다.

@app.post(path="/api/v1/testAPI/", response_model=TestResponse)
-> @app.post(path="/api/v1/testAPI", response_model=TestResponse)

방법 2

바꿔야할 endpoint가 너무 많다면

app = FastAPI()
app.router.redirect_slashes = False

app 을 생성한 다음 redirect_slashes를 False로 설정해주어 redirect 되지 않도록 하면됩니다.

 

읽어주셔서 감사합니다.

Comments