본문 바로가기
개발 환경 및 오류

[Tomcat] GET 방식 특수문자 파라미터 처리하기

by 노랑파랑 2023. 3. 16.
반응형

GET 방식으로 URL 파라미터를 넘기다보면 특수문자 구분자를 사용해야할 때가 있다.

예를들면,, 자주 쓰이는건 |  Vertical Bar (버티컬바)

하지만 특수문자를 사용하려고 하면 오류나 값이 잘 안넘어 갈 때가 있다.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

 

아주 예전엔 오류는 나지 않고 파라미터 값 전달이 제대로 되지 않았었는데 Tomcat 버전 업그레이드 이후 특수문자를 유효한 문자로 인정하지 않아 오류나 나타난다.

62273: Implement configuration options to work-around specification non-compliant user agents (including all the major browsers) that do not correctly %nn encode URI paths and query strings as required by RFC 7230 and RFC 3986. (markt)

 

 

해결방안1

웹 소스에서 URL을 넘길때 인코딩을 해준다

var param = encodeURIComponent(value);
var url = "../test.com?title=안녕하세요&param="+param;

 

 

해결방안2

server.xml 파일 내 relaxedQueryChars 추가해 허용할 문자열을 명시한다.

<Connector
  connectionTimeout="20000"
  port="8080"
  protocol="HTTP/1.1"
  redirectPort="8443"
  relaxedQueryChars="^{}[]|" />

 

 

해결방안3

특수문자를 허용하는 Tomcat 버전을 사용한다.

아파치의 버그 이슈를 보면 아래와 같은 톰캣 버전에 해당 사항이 적용되어있다.

  • 9.0.8 이상 버전
  • 8.5.x대의 톰캣은 8.5.31 이상 버전
  • 8.0.x대의 톰캣은 8.0.52 이상 버전
  • 7.0.x대의 톰캣은 7.0.87 이상 버전

따라서 위 버전들을 피하는 톰캣 버전을 사용하면 된다.

반응형