JAVA

[에러]Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986 에러 해결하기

예나부기 2022. 2. 15.

에러 내용

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방식으로 호출하기

 

 

** 위 방법으로 해결이 되지 않는다면 톰캣 다운그레이드를 하는 방법도 있다고 한다.

댓글