FastAPI로 구축한 API 서버와 클라이언트 애플리케이션의 통신간에 문제가 발생했다.
GET 방식으로 쿼리를 보내면 다음과 같은 Response body와 함께 Status Code 500이 반환됐다.
can't parse JSON. Raw result:
Internal Server Error
Response headers에서 문제의 원인을 찾을 수 있었다.
나의 로컬 환경에선 Simple Request 방식으로 CORS요청이 이루어졌는데, 클라이언트 애플리케이션을 개발하는 환경에선 Credentialed Request 방식으로 CORS요청이 이루어졌던 것이 문제였다.
공식문서의 CORS 항목을 참고해서 미들웨어를 추가했더니 간단하게 해결했다(그 뒤에 MySQL 버전 차이로 인해 좀 더 고생했지만...).
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# 출처 명시
origins = [
"http://localhost.tiangolo.com",
"https://localhost.tiangolo.com",
"http://localhost",
"http://localhost:8080",
]
# 미들웨어 추가
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/")
async def main():
return {"message": "Hello World"}
왜 두 환경 간에 CORS Request 방식에 차이가 있던 건지는 모르겠다.
이 참에 CORS에 대해서 좀 더 공부해봐야겠다.
깔끔하게 잘 정리된 글이 있어 여기에 링크를 남겨둔다.
'트러블슈팅' 카테고리의 다른 글
[트러블슈팅] Uncaught ReferenceError: kakao is not defined (5) | 2021.04.29 |
---|---|
[트러블슈팅] mongoose find not working (0) | 2021.03.10 |
[스크랩] 누구나 한 번쯤은 띄워본 JavaScript 에러 TOP 10. (0) | 2021.02.20 |
[트러블슈팅] LF/CRLF 에러 (0) | 2021.01.20 |
[트러블슈팅] GitKraken-GitHub 잔디가 안 심어질 때 (0) | 2021.01.07 |