[에러] Invalid character found in the request target [/api/product/search?searchKeyword=[te] ]. The valid characters are defined in RFC 7230 and RFC 3986

2024. 7. 3. 11:36에러 창고

728x90
SMALL

[Reason]

만든 검색 api에 테스트로 '[', ']' 이 두 개의 특수 기호를 넣어서 호출시켜 보았더니 잘못된 문자가 포함되어있다는 에러가 발생하였다.

검색해보니, SpringBoot는 내장 Tomcat(톰캣)을 사용하고 있으며, 이 Tomcat 의 특정 버전 이상에서 RFC 3986 규격이 적용되었다고 한다.

RFC 3986에는 영어 문자(a-zA-Z), 숫자(0-9), -. ~4 특수 문자 및 모든 예약 문자만 허용된다.

따라서 한글을 URL 쿼리스트링으로 변환하며 생기는 특수문자가 원인이다.

 

그런데 유독 다른 특수 기호들은 무사히 넘어오는 반면에 '[', ']' 이 두 가지의 특수 기호만이 심하게 허용되지 않아 발생된 이슈이다.

 

 

[Solution]

@Configuration
public class TomcatWebCustomConfig implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

    // 특수 기호 허용 설정
    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.addConnectorCustomizers(connector -> connector.setProperty("relaxedQueryChars", "<>[\\]^`{|}[]"));
    }
}

내부 톰캣에 특수 문자 허용 설정을 적용해주는 Config 파일을 만들고 customize를 통해 relaxedQueryChars 옵션을 통해 특수 기호를 허용해주었다.

 

정상적으로 [, ] 특수 기호를 포함한 파라미터가 넘어온 것을 확인할 수 있다.

728x90
반응형
LIST