Server
[Tomcat] get방식 파라메터 '|' (파이프) 오류
망할고양이
2020. 7. 15. 11:54
방법을 설명하기에 앞서 가장먼저 말씀드리자면 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을 다르게 변환합니다. 따라서 파이프기호는 사용을 지양하는것이 오류를 줄일 수 있고 우리가 시간을 절약할 수 있는 길입니다.