Redirect

Protocol

개요

리다이렉트는 서버가 3xx 상태 코드와 `Location` 헤더로 클라이언트에게 '요청한 리소스가 다른 URL에 있으니 그리로 다시 요청하라'고 안내하는 메커니즘입니다.

URL 이동, HTTP→HTTPS 강제, 로그인 후 페이지 이동, 단축 URL 등 웹 곳곳에서 쓰입니다.

자세히

코드마다 의미가 다릅니다. `301 Moved Permanently`는 영구 이동(검색엔진이 링크·랭킹을 새 URL로 이전, 브라우저가 캐시)이고, `302 Found`/`307 Temporary Redirect`는 일시 이동입니다. 여기서 미묘하지만 중요한 차이가 있습니다 — 301·302는 역사적으로 많은 클라이언트가 POST를 GET으로 바꿔 재요청하는 반면, `307`(임시)·`308`(영구)은 원래 메서드와 본문을 그대로 유지합니다. 그래서 POST 요청을 안전하게 리다이렉트하려면 307/308을 써야 데이터 유실·의미 변화를 막습니다. `303 See Other`는 POST 처리 후 결과 페이지로 GET 이동시키는 PRG(Post/Redirect/Get) 패턴에 씁니다.

실무 주의점이 있습니다. (1) HTTPS 강제 리다이렉트의 첫 평문 홉은 가로채기 위험이 있어 HSTS로 보완합니다. (2) 리다이렉트 체인(여러 번 튕김)이나 무한 루프는 지연과 오류의 원인이니 최소화합니다. (3) `Location` 값에 사용자 입력을 검증 없이 넣으면 오픈 리다이렉트 취약점(피싱에 악용)이 되므로 허용 목록으로 제한합니다. (4) 정적 호스팅(예: Cloudflare Pages)은 `/index.html` 같은 URL을 클린 URL로 308 리다이렉트하는데, 서비스 워커가 이 리다이렉트된 응답을 캐시하면 내비게이션이 깨질 수 있으니 캐싱 정책에 주의해야 합니다.

관련 타입