본문 바로가기
카테고리 없음

직접 접속하면 200인데, HTTP 클라이언트로 요청을 보내면 500

by softserve 2024. 12. 11.
반응형

발단

페이스북 로그인 연동을 마치고 최종적으로 게시 버튼을 눌러 작업을 완료하려고 하니,

개인정보처리방침 url이 잘못되었다는 경고가 떴습니다.

해당 주소로 접속해보니 아무 이상이 없어보이는데 아무튼 안 된다고 합니다.

그래서 우리의 친구 GPT에게 물어봤더니 다음과 같은 원인을 제시해줬습니다.

 

  • HTTPS 미사용: URL이 반드시 HTTPS로 되어 있어야 합니다. HTTP는 지원하지 않습니다.
  • 유효하지 않은 URL: 입력한 URL이 실제로 존재하지 않거나, 연결이 끊어진 경우.
  • Facebook 정책 미준수: URL에 접근했을 때 내용이 Facebook의 개인정보처리방침 요구사항을 충족하지 않을 경우. 예를 들어, 개인정보 수집, 사용, 저장, 공유 방법 등에 대한 명확한 설명이 부족할 때.
  • URL 포맷 문제: URL이 완전한 절대 경로 형식이어야 하며, 잘못된 문자가 포함되어 있으면 오류가 발생할 수 있음.
  • 테스트 환경 문제: Facebook 앱 설정에서 개발 모드일 경우 일부 URL이 제한될 수 있음.

 

https로 되어 있었고 접속이 잘 되는 것으로 보아 유효하지 않은 url도 아니었습니다.

혹시 내용이 부족해서 그런 것은 아닐까 하는 생각도 들었지만

사람이 검수를 하는 것이 아닌 이상 내용에 대해서 그렇게 면밀하게 검토를 할 것 같지는 않았습니다.

 

유레카

 

답답한 마음에 postman을 켜서 해당 url에 요청을 보내봤더니 500 에러가 뜹니다.

에러의 정체는 극악무도한 Null Pointer Exception 이었습니다.

그러고 보니 최근에 accept-language를 가져와서 사용하는 부분을 추가했었는데 혹시...?

JSP의 request 객체로부터 헤더의 내용을 가져오는 getHeader() 메서드는 

해당하는 파라미터 값이 없으면 null을 반환합니다.

이 값을 그대로 사용하니 NPE가 발생했던 것입니다!

브라우저를 통해 접속할 때는 accept-language 값이 당연히 있을테니 문제가 없지만

postman, cURL로 요청을 보내는 경우는 accept-language 값이 없어서 문제가 됩니다

 

해결

 

그냥 null 체크만 해주면 됩니다.

String lang = request.getHeader("accept-language") != null ? request.getHeader("accept-language") : "";

 

반응형

댓글