302 Found
사용법
302 Found 상태 코드를 받으면 클라이언트는 요청한 리소스가 임시로 이동했음을 이해합니다. 두 번째 요청으로 새 위치에서 리소스를 가져옵니다. 클라이언트가 내부 링크를 갱신할 필요가 없다는 점에서 301보다 간단합니다.
참고
하위 호환을 위해 클라이언트는 리다이렉트 시 요청 메서드를 POST에서 GET으로 바꾸는 것이 허용됩니다. 모호함을 없애려면 서버가 대신 다른 상태 코드를 반환합니다. 303 상태 코드는 리다이렉트에 반드시 GET 메서드를 써야 함을 나타내고, 307 상태 코드는 원래 메서드를 보존하도록 요구합니다.
302 응답을 유발하는 흔한 상황으로는 HTTP에서 HTTPS로의 전환(대개 301이 더 적절합니다), URL 정규화(끝 슬래시), A/B 테스트, 위치 기반 콘텐츠 라우팅, 임시 점검 리다이렉트가 있습니다.
참고
302는 오류가 아니라 성공적인 리다이렉트입니다. 서버는 리소스를 찾았고 클라이언트를 현재 위치로 안내하는 중입니다. 원치 않는 302 리다이렉트를 해결하려면, 그 리다이렉트가 의도된 것인지 확인하고, 이동이 영구적이라면 301로 바꾸며, CMS 설정이나 .htaccess에 의도치 않은 규칙이 없는지 점검하세요.
캐시 가능성
302 응답은 기본적으로 캐시할 수 없습니다. 301이나 308과 달리, 302가 캐시에 저장되려면 명시적인 Cache-Control 또는 Expires 헤더가 필요합니다.
SEO 영향
강한 신호인 301과 달리, Google은 302를 리다이렉트 대상이 선호 URL이라는 약한 신호로 취급합니다. Google은 원본 URL이나 대상 URL 중 하나를 처리합니다. 302를 장기간 그대로 두면 결국 영구 리다이렉트로 취급될 수 있으므로, 영구적인 변경에는 301이 더 적합합니다.
예시
클라이언트가 임시로 이동한 리소스를 요청합니다. 서버는 새 위치를 알려 주고 클라이언트 측에 표시할 관련 메시지를 제공합니다.
요청
GET /news.html HTTP/1.1
Host: example.com
응답
HTTP/1.1 302 Found
Location: http://example.com/testing/news.html
Content-Type: text/html
Content-Length: 167
<h1>The Newsfeed has moved</h1>
<body>
The site is under development and the newsfeed has
temporarily moved to
<a href=/testing/news.html>here</a>.
</body>
코드 참고
.NET
HttpStatusCode.Found
Rust
http::StatusCode::FOUND
Rails
:found
Go
http.StatusFound
Symfony
Response::HTTP_FOUND
Python3.5+
http.HTTPStatus.FOUND
Java
java.net.HttpURLConnection.HTTP_MOVED_TEMP
Apache HttpComponents Core
org.apache.hc.core5.http.HttpStatus.SC_MOVED_TEMPORARILY
Angular
@angular/common/http/HttpStatusCode.Found