리뷰를 GET 할 때
리뷰 이미지에 index값이 1,2,3,4,5, 이런식으로 들어오는 게 아니라
이런 식으로 들어온다..
이제 왜때문에 이렇게 값이 들어오는지 파보도록 하자 ..
* 오른쪽으로 들어와야 정상 = localhost로 연결했을 때 상황
우선, 추측을 해보면
1. addReview 할 때 애초에 잘못 insert 했다.
2. getReview 할 때 reviewImage 값 set이 이상하게 됐다.
3. 배포 연결한 DB 설정 /서버 문제
정도로 우선 예상이 가는데
우선 local에서는 같은 코드로도 아주 잘 돌아가니 3번이 제일 의심간다
(근데 저 ImageIndexs는 Vo로 만든건데 그게 연관이 있나..)
우선 배포한 사이트에서만 오류가 나기때문에 서버로그를 확인하기 위해 SSH 접속 후 아래의 명령어를 입력한다.
https://passwd.tistory.com/entry/journalctl
ubuntu@a.b.c.d:/var/log/tomcat9$ journalctl -xe
그러면 이제 서버 에러 코드를 상세히 알려주는데,
코드를 하나씩 해석해보자면,
java.lang.IllegalArgumentException: Invalid character found in the request target [/data/reviewImage?index=[ ]. The valid characters are defined in RFC 7230 and RFC 3986 at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:494)
: 오류가 발생한 위치, "org.apache.coyote.http11.Http11InputBuffer" 클래스의 "parseRequestLine"메소드에서 발생하였고
HTTP 요청대상(target)에서 유효하지 않은 문자가 발견됨, 유효한 문자는 RFC 7230 and RFC 3986에서 정의 되어있음.
이 경우, [/data/reviewImage?index=[ ]라는 요청 대상에 잘못된 문자가 포함되어있어서 발생한 오류
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:271)
: 오류가 발생한 위치,"org.apache.coyote.http11.Http11Processor"클래스의 "service"메소드에서 발생.
따라서, HTTP 요청 헤더를 파싱하는 과정에서 잘못된 문자가 발견되어 오류가 발생한 것임으로,
해당 요청 대상에 사용된 문자를 검토 후 유효문자 범위 내의 문자로 수정해야 함을 파악했다.
그래서 RFC 7230 and RFC 3986 과 관련된 오류코드를 찾아보니,
오류가 발생하는 원인은
"유효하지않은 문자(특수문자나 한글같은..?)가 쿼리스트링으로 포함된 URI로 요청시에 나는 톰캣 에러"
라고 한다.
해결 방법은
1. 톰캣 Server.xml의 Connector에 relaxedQueryChars를 추가 (원하는 특수문자 다 추가)
2. 요청보내는곳에서 encoding 처리해서 보내기
예를 들면 javascript에서는 param을 보낼 때, encodeURI(param) 처리를 해서 보내면 된다
(참고- https://aroundlena.tistory.com/50)
근데 수정해도 안되네.. 뭐가 문제일까 흐잉
'Spring' 카테고리의 다른 글
[Spring] 좋은 객체지향 프로그래밍이란? (0) | 2023.10.29 |
---|---|
[Spring] Spring 이란 ? (37) | 2023.10.29 |
[SpringBoot] email Auth: 이메일 인증 구현하기 (1) | 2023.02.22 |
[SpringBoot] 회원가입 구현하기 (0) | 2023.02.14 |
[SprinBoot] @ResponseBody 어노테이션 (0) | 2022.12.27 |