방법을 설명하기에 앞서 가장먼저 말씀드리자면 Apache Tomcat 8.0.30에서는 작동하지만 Tomcat 8.5에서는 작동하지 않습니다. 아마도 아래와 같은 에러로그를 만날 수 있을 겁니다.

Java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
	at org.Apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.Java:467)
	at org.Apache.coyote.http11.Http11Processor.service(Http11Processor.Java:667)
	at org.Apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.Java:66)
    ......
    ....
    ...
    ..
    .
    

 

8.5버전 이전까지는 아래의 매개 변수를 이용하여 사용할 수 없는 파라메터에 대해서 정의할 수 있었습니다.

Tomcat.util.http.parser.HttpParser.requestTargetAllow 

 

8.5버전 부터는 해당 매개변수를 지원하지 않아 Sever.xml의 Connector 설정에서 별도의 파라메터인 relaxedQueryChars를 통해 설정 할 수 있습니다. 

<작성예시>
<Connector port="80" 
           protocol="HTTP/1.1"
           maxThreads="150"
           connectionTimeout="20000"
           redirectPort="443"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgents="gozilla, traviata"
           compressableMimeType="text/html,text/xml"
           
           relaxedQueryChars="[,]"
/>

응용 프로그램에 기본적으로 Tomcat에서 지원하지 않는 특수 문자가 더 필요한 경우 relaxedQueryChars 속성에 해당 특수 문자를 쉼표로 구분하여 추가 할 수 있습니다.

 

 

마치며...

파이프 기호는 시간이 지남에 따라 브라우저마다 다르게 처리 된 기호입니다. 예를 들어, Chrome 및 Firefox는 복사/붙여 넣기시 파이프가있는 URL을 다르게 변환합니다.  따라서 파이프기호는 사용을 지양하는것이 오류를 줄일 수 있고 우리가 시간을 절약할 수 있는 길입니다.

+ Recent posts