[Spring] Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

node·2023년 12월 11일
0

문제해결

목록 보기
4/5

들어가며


해당 문제는 Spring 서버로 API 서버를 구축하고 GET 방식의 API를 테스트 하다 발생한 문제로 해결 방법을 공유하려고 한다.

문제


  • GET Method 요청을 사용할때 쿼리 파라미터에 한글을 보낼때 아래와 같은 에러메세지가 출력된다.
    Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

원인


  • SpringBoot는 내장 Tomcat(톰캣)을 사용하고 있으며, 이 Tomcat 의 특정 버전 이상에서 RFC 3986 규격이 적용되었다고 한다.
  • RFC 3986에는 영어 문자(a-zA-Z), 숫자(0-9), -. ~4 특수 문자 및 모든 예약 문자만 허용된다.
  • 따라서 한글을 URL 쿼리스트링으로 변환하며 생기는 특수문자가 원인이다.

해결방법


해당 에러를 발생시키지 않으려면, relaxQueryChars 옵션에 허용할 문자를 추가하거나 톰캣 버전을 다운그레이드해야한다.

  1. Config 파일을 추가하여 쿼리문자를 사용가능하도록 설정
@Configuration
public class TomcatWebCustomConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "<>[\\]^`{|}"));
    }
}
  1. 문제가 발생하는 톰캣 버전을 피하기
  • 9.0.8 이상 버전
  • 8.5.x대의 톰캣은 8.5.31 이상 버전
  • 8.0.x대의 톰캣은 8.0.52 이상 버전
  • 7.0.x대의 톰캣은 7.0.87 이상 버전
profile
NOvice + DEveloper

0개의 댓글