본문 바로가기
Java 웹 프로그래밍

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

by irerin07 2020. 8. 26.
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