tl;dr: 이 에러는 플라스크에서 request body의 데이터에 대해 미리 정의한 key로 접근하는데에 실패하면서 발생하는 에러이다.
"The browser (or proxy) sent a request that this server could not understand"
Flask를 사용해서 파일 업로드 및 data form을 받는 웹 서버를 구현할 때에 가끔씩 다음과 같은 메세지를 리턴 받는 경우가 발생한다:
The browser (or proxy) sent a request that this server could not understand.
서버 로그를 확인해보면 다음과 같은 내용이 있을 것이다:
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand.
예외 이름에서 알 수 있듯이, 이 에러가 발생하는 주된 이유는 key와 관련된 것으로, 일반적으로 `request.form`나 `request.files`로 부터 미리 정의한 key를 사용해서 파일 혹은 데이터에 접근하려다 실패하였을 때 발생하게 된다.
보통 플라스크 서버에서는 이러한 경우에 어떤 key에 대해서 에러가 발생하였는지 로그를 남기기에 이를 확인하는 것이 최선이다.
예시
예를 들어, 플라스크 서버의 `/upload` API는 이미지를 업로드하는데 사용되는 API이다. 이 API는 다음과 같이 request body의 파일들 중에서 'image'라는 key를 사용하는 데이터에 접근하려고 한다.
@api.route("/")
class FileUploader(Resource):
def post(self):
file = request.files['image']
...
만약 이때, request.files 딕셔너리에 'image'라는 키를 가진 데이터가 존재하지 않는다면 werkzeug가 이를 잘못된 요청으로 판단하고 "The browser (or proxy) sent a request that this server could not understand."라는 리턴 메세지와 함께 400 response를 보내게 된다.
이러한 에러를 없애고 싶다면, 요청을 보내는 client쪽 코드를 수정하거나, 아니면 해당 키를 사용해서 `request.form`나 `request.files`에 접근하는 코드를 try-catch로 감싼 후에 적절한 조치를 취하도록 만들면 된다.
'Python > Flask' 카테고리의 다른 글
Dropzone.js를 사용해 대용량 파일 업로드 API 성능 개선 (0) | 2023.10.09 |
---|---|
Flask에서 async 기반 API 구현하기 (0) | 2023.10.09 |