정보: 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:460) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:291) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1376) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) |
아파치 톰캣 버전이 올라가면서 URI에 특수문자, 한글을 씌우면 다음과 같은 오류가 발생한다.
이런 경우 GET, POST 등 뭐로 URI 날려도 오류가 발생한다.
톰캣 7.x 특정 버전 이상부터 RFC 3986 규정이 적용되어, 더 이상 URI에 특수문자와 같은 텍스트를 넣을 수 없다.
이를 해결해주기 위해서 인코딩을 처리해서 날린다음에 받는 쪽에서 디코딩을 해줘야 한다.
이름과 같은 한글을 넘겨주는 특수한 상황에서는 골치아프다.
자바스크립트에서 해당 URI를 encodeURI()로 씌워서 날려주면 해결된다.
한글을 지양하는 것이 더 나은방법이겠다. 그게 내맘대로 되는 것은 아니지만...
-> 추가로
거의 인터넷을 보면 자바스크립트 버전만 있는것 같다.
자바와 같은 경우는 다음과 같이 처리하면 깔끔하게 해결된다.
// 기존 방식
UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(url).build();
uriComponents.toUri()
// 수정된 방식
UriComponents uriComponents = UriComponentsBuilder.fromHttpUrl(url).build();
uriComponents.encode().toUri()
UriComponents 클래스의 encode() 메소드를 사용해서 처리하면 간단하게 특수문자를 처리한다.
톰캣 버전을 바꾸느니 뭐니...그런식으로 할 필요가 없다..
댓글