Python/Flask

Flask - "The browser (or proxy) sent a request that this server could not understand."

검정비니 2023. 10. 9. 19:24
728x90
반응형

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로 감싼 후에 적절한 조치를 취하도록 만들면 된다.

 

반응형