728x90
반응형
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.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:192)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1028)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
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)
현재 톰캣 7.0버전으로 테스트 중인데 해당 오류 메시지와 함께 400 Error 가 발생했다.
에러 원인
http://localhost:8080/device/makeurl/Device.do?allattr_seq=|1|2&old_seq=|1|2
400 Error는 문법 오류인데, get방식으로 controller 로 request를 보낼때 문자 구분용으로
특수기호 ( '|' )가 들어가서 생긴 오류였다.
Tomcat 버전에 따라 RFC 3986 연동 규격이 적용되어 지는데 URL에서 사용되는 예약어가 있고,
그렇지 않은 비예약어 문자가 있다.
예약어 - ! , *, ' , ( , ), ; , : , @, &, = , + , $, , / , ? , # , [ , ]
비예약어 - 예약어가 아닌 문자(a,b,c,d....) 및 숫자(0,1,2,3...) , 특수기호 ( -, _ , . , ~)
예약어가 포함되어 위의 에러가 난 듯 싶다.
해결방법
URL 인코딩(Encoding) 방식인 javascript 함수를 같이 쓰면 된다. URL로 사용할 수 없는 예약어를 사용할 수 있도록 인코딩해준다.
encodeURLComponent(url) : 모든 문자를 인코딩하는 함수
특수문자가 들어가는 url을 encodeURLComponent로 감싸 실행하면 깔끔하게 해결된다.
반응형
'Backend > Spring' 카테고리의 다른 글
[log4j2, Logback] 로깅 라이브러리 (0) | 2022.07.31 |
---|---|
[tomcat] 에러 org.apache.catalina.LifecycleException, java.lang.ClassNotFoundException 해결방법 (1) | 2021.11.01 |
[Spring] 스프링 프로젝트에서 빨간줄 뜰때 해결법 (0) | 2021.10.28 |
[Spring] JDBC 기반 트랜잭션(Transaction) 관리자 -DataSourceTransactionManager (0) | 2021.10.27 |
[mybatis 에러] org.apache.ibatis.binding.BindingException 에러 원인 (2) | 2021.10.25 |