인프라 · 구성요소 · 검증됨

Redirect

서버가 3xx 상태 코드와 Location 헤더를 응답해 클라이언트를 원래 요청 URL에서 다른 대상 URL로 자동 이동시키는 요청 전달 방식입니다. 입력은 원래 URL 요청이고 출력은 대상 URL로의 재요청입니다.

핵심 답변

Redirect는 서버가 3xx 응답과 Location 헤더로 브라우저를 다른 URL로 이동시키는 구성요소입니다. 상태 코드에 따라 영구(301·308)와 임시(302·303·307)로 나뉘며, 잘못 구성하면 순환이 생겨 요청이 종료되지 않을 수 있습니다.

상세 설명

Redirect(리다이렉트)는 하나의 자원에 여러 URL을 부여해, 원래 요청한 URL에서 다른 URL로 브라우저를 자동으로 이동시키는 구성요소입니다. 서버는 3으로 시작하는 상태 코드와 이동할 주소를 담은 Location 헤더를 응답하고, 브라우저는 그 주소로 다시 요청을 보냅니다.

사용자는 추가 왕복 요청을 거의 인지하지 못하지만, 요청은 두 번 일어납니다.

상태 코드 구분

리다이렉트의 성격은 상태 코드로 결정됩니다.

구분코드의미메서드 처리
영구301 Moved Permanently주소가 영구 이동GET 유지, 그 외는 GET으로 바뀔 수 있음
영구308 Permanent Redirect주소가 영구 이동메서드와 본문 유지
임시302 Found일시적으로 다른 위치GET 유지, 그 외는 GET으로 바뀔 수 있음
임시303 See Other다른 자원 참조모든 메서드를 GET으로 변경
임시307 Temporary Redirect일시적 이동메서드와 본문 유지
특수300 Multiple Choices여러 대상 중 선택클라이언트가 목록에서 선택
특수304 Not Modified캐시된 응답이 아직 유효캐시 재사용 지시

영구(301·308) 리다이렉트는 검색 엔진과 크롤러가 원래 URL을 새 URL로 갱신하지만, 임시(302·303·307) 리다이렉트는 새 URL을 기억하지 않습니다. POST·PUT·DELETE 처리 후에는 303으로 결과 페이지로 이동시키면 새로고침 시 요청이 다시 전송되는 것을 방지할 수 있습니다.

리다이렉트를 거는 위치

같은 이동이라도 처리 계층이 다르며, 여러 방식을 섞으면 동작 순서를 예측하기 어렵습니다.

방식실행 시점특징
HTTP 리다이렉트가장 먼저서버가 3xx로 응답, 가장 권장
JavaScript(window.location)HTML 로드 완료 전JS 활성 클라이언트에서만 동작
HTML <meta http-equiv="Refresh">페이지 로드 후HTML 콘텐츠에서만 동작

주요 용도는 도메인 정규화(example.comwww.example.com), HTTPS 강제(http://https://), URL 구조 변경 시 기존 링크와 SEO 유지입니다.

순환에 주의

리다이렉트가 서로를 가리켜 끝나지 않는 **순환(redirect loop)**을 만들면 요청이 완료되지 않습니다. MDN에 따르면 이 경우 서버는 500 Internal Server Error를 응답할 수 있고, 브라우저는 "리디렉션이 종료되지 않는다"는 오류 화면을 표시합니다.

[Observation] HTTP 리다이렉트와 HTML meta 리다이렉트를 혼용하지 말고, 리다이렉트 체인이 순환을 만들지 않는지 확인합니다. 리다이렉트는 최소한으로 유지하는 것이 성능에 유리합니다.