프런트에서 Axios Post 요청을 진행했을 때 Failed to load resource 406 에러를 만나버렸습니다.
요청을 보내는 부분까지는 잘 동작했고 백엔드 서버에 컨트롤러 까지는
잘 도착하여 로그에 찍히는 모습을 보여주었는데 이상하게도 리턴을 하고나면
프런트의 catch문에서 잡히는 모습을 볼 수 있었습니다.
Reponse부분에서 문제가 있는 것 같아서 백엔드에서 리턴 데이터의 값도 바꿔보고, JsonObject에 담아서
리턴해보기도 하고 Try-catch문을 다시 작성해보기도 했는데 소용이 없었습니다.
해당 406 에러에 대해서 조금더 알아보기 위해 찾아봤을 때 406 에러 코드는 아래와 같은 내용을 담고 있는 에러였습니다.
'HTTP (HyperText Transfer Protocol) 406 Not Acceptable 클라이언트 오류 응답 코드는 서버가 요청의 사전 콘텐츠
협상 헤더에 정의 된 허용 가능한 값 목록과 일치하는 응답을 생성할 수 없으며 서버가 기본 표현을 제공하지 않음
을 나타냅니다'.
서버에서 Response 를 해줄 때 Accept 헤더에 적혀있는 형식을 생성해 낼 수 없을 경우 발생하는 에러였는데
자세히 알아보기 위해 개발자도구(F12) > Network 에서 Post 요청이 발생했을 때 해더에 값을 확인해보았습니다.
프런트에서 Request Headers에 Accpet(클라이언트에서 웹서버 요청 시 해당 선언 타입만 사용하겠다는 의미의 해더)는
아래와 같았고
Response Headers 에 Content-Type(Response 시 데이터 타입) 은 아래와 같았는데 charset=UTF-8 부분이 때문에
오류가 발생했다고 생각했습니다.
역시나 .. 서버의 컨트롤러 부분을 확인해보니 produces 어노테이션을 사용하여 응답메시지의 형태를 지정하고
있었습니다.
위 부분에 produces를 지우고나니.. 406에러가 말끔하게 사라졌습니다.
혹시나 406에러가 발생하시는 분들은 통신을 주고받을 때 사용하는 데이터 타입이 다른지 확인하시고 통일
하도록 수정하시면 될 것같습니다.
406 에러를 찾다가 produces 등에 잘 정리하신 글을 발견하여 공유합니다.
https://2ham-s.tistory.com/292