HTTP 302 Found
임시 리디렉션: 리소스가 지금은 다른 곳에 있지만, 원래 URL이 여전히 정식 URL입니다.
HTTP 302의 의미
HTTP 302 Found는 클라이언트에게 Location 헤더에 있는 URL에서 리소스를 가져오되, 이번 한 번만 그렇게 하라고 알립니다. 원래 URL은 여전히 정규 주소이며 이후에도 계속 요청되어야 합니다.
과거에는 브라우저가 302를 따라갈 때 POST를 GET으로 변경했는데, 이는 스펙에 어긋나는 동작이었습니다. 이후 HTTP는 메서드가 보존됨을 보장하는 307 Temporary Redirect를 추가했습니다. 302는 단순한 GET 리다이렉트에서 여전히 실용적인 기본 선택지로 남아 있습니다.
302 응답이 발생하는 일반적인 원인
- 페이지가 일시적으로 다른 위치에서 제공되는 경우(유지보수, A/B 테스트, 캠페인 랜딩 페이지)입니다.
- 로그인 또는 결제 이후 흐름에서 브라우저를 리다이렉트하는 경우입니다(POST-리다이렉트-GET 패턴이며, 엄밀히는 303이 정확한 선택입니다).
- 방문자마다 달라지는 지역 또는 언어 기반 리다이렉트입니다.
- 잘못 설정되어 수년간 302로 방치된 사실상의 “영구” 이동입니다.
개발자를 위한 모범 사례
- 이동이 실제로 영구적이라면 301/308로 전환하세요. 오래 지속되는 302는 검색 엔진에 혼란스러운 신호를 보냅니다.
- 요청 메서드와 본문을 보존해야 한다면 307을, POST 이후 강제로 GET을 사용해야 한다면 303을 사용하세요.
- 명시적인 Cache-Control 헤더를 추가하지 않는 한 302 응답을 캐시하지 마세요.
응답 예시
HTTP/1.1 302 Found Location: https://example.com/summer-sale/ Cache-Control: no-store
SEO 영향
검색 엔진은 302를 보면 이동이 일시적이라고 선언된 것으로 간주하여 원래 URL을 색인에 유지합니다. 302가 수개월간 그대로 남아 있으면 Google은 이를 사실상 301처럼 취급하는 경우가 많지만, 명확하게 의도에 맞는 코드를 선택하는 것이 더 좋습니다.
자주 묻는 질문
302 리다이렉트는 SEO에 해가 되나요?
진짜로 일시적인 이동에 사용된다면 문제가 되지 않습니다. 문제는 영구적인 이동을 302로 제공하여 새 URL로의 신호 전달이 지연될 때 발생합니다.
302와 307의 차이는 무엇인가요?
307은 리다이렉트를 따라갈 때 HTTP 메서드가 보존됨을 보장합니다. 302는 실제로는 브라우저가 POST를 GET으로 변환하도록 두는 경우가 많습니다.
303 See Other는 언제 사용해야 하나요?
POST 처리 후 브라우저를 GET으로 결과 페이지에 보낼 때 사용합니다. 전형적인 POST-리다이렉트-GET 패턴입니다.