status().isMovedPermanently() → 301 Moved Permanently가장 전통적인 영구 리다이렉트 코드.
의미: “리소스의 주소가 영구적으로 바뀌었으니 앞으로는 새 주소로 접근해라.”
브라우저는 이걸 받으면 캐싱해서, 같은 URL을 다시 요청할 때 자동으로 새 주소로 이동함.
SEO(검색엔진 최적화)에서도 "이제 여기 페이지는 새 주소다" 라는 시그널로 쓰임.
status().isPermanentRedirect() → 308 Permanent RedirectHTTP/1.1 이후 도입된 새로운 영구 리다이렉트 코드.
의미는 301과 같지만, 중요한 차이가 있음.
301은 브라우저/클라이언트 구현체에 따라 POST 요청이 GET으로 바뀌는 문제가 있었음.
308은 반드시 원래 HTTP 메서드와 바디를 그대로 유지해야 함.
POST /old → 301 → 일부 클라이언트는 GET /new로 바꿔버릴 수 있음
POST /old → 308 → 반드시 POST /new로 유지됨
isMovedPermanently() → 301 (영구 리다이렉트, 메서드 변경될 수 있음)
isPermanentRedirect() → 308 (영구 리다이렉트, 메서드/바디 보존)