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