본문 바로가기
프로그래밍

[Spring] redirect: 접두사는 항상 http로 리다이렉트 된다.

by 탁구치는 개발자 2019. 9. 20.

다음과 같은 코드가 있다고 하자.

@GetMapping("/completeGift")
public ModelAndView completeGift() {
    return new ModelAndView("redirect:/");
}

사용자가 https://myservice.com/completeGift 페이지를 호출했다면 리다이렉트가 될 것이다.

우리가 예상하는 페이지는 당연히 https://myservice.com 가 될 것이다.

하지만 예상과는 다르게 http://myservice.com 페이지로 호출하게 된다.

차이점이 보이는가?

 

프로토콜이 달라지는 것을 알 수 있다. https 사이트에서 http 사이트로 페이지 리다이렉트 됐다.

우리는 대게 서비스를 오픈하게 되면 http://myservice.com 로 접속했을 때 https://myservice.com 페이지로 리다이렉트 해준다.

물론 안할수도 있겠다.

만약 이와같은 설정을 하지 않는다면 사용자에게는 페이지를 찾을 수 없습니다. 라는 메세지를 보여주게 되겠지....

여튼 http 로 접근하면 https 로 리다이렉트 해주세요. 라는 설정을 했다면 위의 상황이 어떻게 될까?

  1. https://myservice.com/completeGift 페이지 접속
  2. http://myservice.com 페이지로 리다이렉트
  3. 하지만 서버 설정으로 인해 https://myservice.com 페이지로 리다이렉트

위와같이 동작을 하게 된다.

즉, 라이브 서비스에서는 문제가 되지 않을수도 있지만 테스트망에서는 https -> http 로 프로토콜이 바뀌는 현상이 발생할 수 있으니 잘 알아두자.

 

만약 https -> http 로 바뀌지 않게 설정을 원한다면 다음과 같이 설정을 추가해 주면 된다.

spring boot 2.1 기준의 설정임을 참고

application.yml 파일에서 use-relative-redirects 설정을 true 로 바꿔주면 된다.

server:
  port: 8080
  tomcat:
    max-threads: 500 # Maximum amount of worker threads.
    min-spare-threads: 50 # Minimum amount of worker threads.
    max-connections: 10000 # Maximum number of connections that the server will accept and process at any given time.
    uri-encoding: UTF-8 # Character encoding to use to decode the URI.
    use-relative-redirects: true

 

위의 설정을 추가해 준 후 테스트를 다시 해보면 다음과 같이 우리가 생각한대로 동작하게 될 것이다.     

  1. https://myservice.com/completeGift 페이지 접속
  2. https://myservice.com 페이지로 리다이렉트