jquery 에서 url을 넘길때 파라미터간 구분자로 " | " 를 사용 하고 있었다
기존에는 아무문제 없이 사용하다가 최근에 톰캣을 최신버전으로 재설치 하였더니 다음과 같은 오류가 생겼다.
java error 로그
Error parsing HTTP request header
Note: further occurrences of HTTP header 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.InternalInputBuffer.parseRequestLine(InternalInputBuffer.java:189)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1000)
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:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
chrome 콘솔 error 로그
Failed to load resource: the server responded with a status of 400 (Bad Request)
최신 버젼 톰캣에서 RFC7230, RFC3986 등 규약? 부분을 강화? 했다고 한다.
RFC3986 에서 아래 문자만 허용하고 있어서 " | " 사용시 오류가 발생했다.
RFC3986 권장 사용 문자
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~:/?#[]@!$&'()*+,;=`.
자세한 내용은
RFC7230, RFC3986 관련 검색
RFC3986 관련 참고 사이트
http://stackoverflow.com/questions/1547899/which-characters-make-a-url-invalid
해결방법
1. "|" 를 다른 권장하는 문자로 교체한다
2. 톰캣 버전을 다운 낮춘다.
3. 해당 값을 생성? 리턴?하는곳에 encodeURIComponent(파라미터값) 을 추가해서 리턴한다.(decode도 해줘야함)
4. POST 방식으로 넘긴다 -- 정확히모르겠음..
EX)
encodeURITest = function() {
var parameter = "test|test1|test2|";
return encodeURIComponent(parameter);
}
정답이 아닐수도 있습니다...
잘못된 부분이 있으면 댓글 부탁드립니다.
'IT > JAVA' 카테고리의 다른 글
[JAVA] JAVA 시간차이구하기, 시간비교하기 after(), before() (2) | 2021.02.24 |
---|---|
[JAVA]MD5 암호화 하기 (0) | 2015.10.10 |