에러 내용
java.lang.IllegalArgumentException:
Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
09-Sep-2020 11:28:49.114 INFO [http-nio-9011-exec-21] org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
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:502)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:502)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:818)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1623)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:832)
에러 발생 이유
IE에서 발생하는 에러로, 특정 버전(7.0.73, 8.0.39, 8.5.7) 이상의 톰캣에서는 보안상의 이유로
쿼리스트링에 특수문자가 포함되어 있을 경우 차단하여 발생한다.
해결 방법
1. Tomcat > conf > server.xml 수정하기 : Connector 부분에
relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`<>"
추가한다. value에 들어갈 값은
- https://tomcat.apache.org/tomcat-8.5-doc/config/http.html 를 참고하자 (검색어 : relaxedQueryChars / relaxedPathChars)
2. URIEncoding으로 감싸준 후에 요청하기
- 자바스크립트에서 encodeURI / encodeURIComponent를 사용하여 주소를 인코딩한다.
encodeURI 는 주소 전체를 인코딩하는 경우 사용하고, encodeURIComponent 는 개별 파라미터를 인코딩하는 경우
3. GET방식이 아닌 POST방식으로 호출하기
** 위 방법으로 해결이 되지 않는다면 톰캣 다운그레이드를 하는 방법도 있다고 한다.
댓글