[에러] 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