Java 웹 프로그래밍
[ERROR] Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
irerin07
2020. 8. 26. 14:39
728x90
스프링 부트2를 사용, Tomcat은 8.5.41 버전 사용하면서 개발중
localhost:8080/search/api/v1/items/store?keyword=강의&size=3&page=1&confirm=false&approve=true&area=1|2
위와 같은 형태로 요청을 보내니 '|' 이 문자를 인식하지 못해서 에러가 발생했다.
해당 에러를 수정하려면 아래 relaxQueryChars 옵션에 허용할 문자를 추가하거나 톰캣 버전을 다운그레이드 하거나,
위 요청을 javascript 의 encodeURI 함수를 통해 인코딩해서 보낼 수 있다면 위 문제는 발생하지 않는다.
아래는 스프링 부트에서 해당 옵션을 추가하는 예 이다.
import org.springframework.boot.web.embedded.tomcat.TomcatConnectorCustomizer;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatWebServerConfig implements
WebServerFactoryCustomizer<TomcatServletWebServerFactory> {
@Override
public void customize(TomcatServletWebServerFactory factory) {
factory.addConnectorCustomizers((TomcatConnectorCustomizer)
connector -> connector.setAttribute("relaxedQueryChars", "<>[\\]^`{|}"));
}
}
출처: http://jmlim.github.io/java/2019/10/14/characters-are-defined-in-rfc-7230-and-rfc-3986/
728x90