1.환경
ALB(Application Load Balancer) 사용
SSL 인증서 적용
HTTPS 통신만 허용
ALB -> Tomcat 형태의 인프라 구성
2.현상
Request Header에 Content-Type을 포함한 여러 해더정보를 전송하였고 Method는 POST를 이용했다.
그러나 서버에 수신된 Request Header는 Content-Type이 Null이고 Method도 GET으로 수신이 되었다.
파일업로드 처리를 위해 httpservletrequest 를 multiparthttpservletrequest 로 캐스팅 하는과정에 Cast Exception이 발생하였다.
Request Body또한 비어 있어 inputstream을이용하여 강제로 꺼내보려 했지만 꺼낼 수 없었다.
3.원인 및 해결방법
클라이언트에서 http를 이용하여 요청이 올경우 ALB에서 https로 포워딩 해주게 된다.
그 과정에 Content-Type을 잃어버리고 Method도 Get으로 변경되며 Request Body도 유실되는 상황이 발생함.
Spring framework의 @Requestbody 어노테이션도 당연히 안되었다.
3-1. 해결방법 #1
http로밖에 전송할 수 없는 상황인경우 ALB의 특정URL 패턴에 예외를 두어 http 통신이 될 수 있도록 조치한다.
3-2 해결방법 #2
당연한 소리겠지만 스펙에 맞게 https로 request요청을 송신한다.
4.잡설
나는 서버에 request를 송신하는 주체가 브라우저가 아닌 다른 CS 프로그램으로 해당 프로그램에서 http로만 전송이 가능하도록 개발되어 있었고.. http로 통신가능하도록 ALB에 요청을 한뒤 테스트하여 해결방안에 대한 방향성을 찾을 수 있었다.
스프링을 사용한다면 MultipartResolver를 설정하고, 전송되는 form Tag에 enctype="multipart/form-data" 옵션을 추가하고 등등 여러가지 글이 있지만 해결되지 않아서 고생을 했지만.....
'Server' 카테고리의 다른 글
[Tomcat] AWS(ALB 사용) 환경에서 Cookie Secure, sameSite 설정 (0) | 2024.08.30 |
---|---|
[Tomcat] JNDI 설정 (0) | 2022.12.28 |
[TOMCAT] url parse 오류로 인한 400 Error (0) | 2022.08.10 |
[Synoilogy Nas] 시놀로지 DSM 6.0 이후 WinSCP Admin Group으로 로그인 하기 (0) | 2020.07.27 |
[Tomcat] get방식 파라메터 '|' (파이프) 오류 (0) | 2020.07.15 |