302 Found
When a resource is temporarily available at a different URL, the server responds with 302 Found, previously known as "Moved Temporarily". The client follows the Location header to reach the resource. Because the response is temporary, the URI is revalidated on each subsequent request.
Usage
When the 302 Found status code is received, the client understands the requested resource has temporarily moved. A second request retrieves the resource at the new location. This is simpler than a 301 because the client is not expected to update internal links.
Note
For backward compatibility, the client is permitted to change the request method from POST to GET on the redirect. To remove ambiguity, the server returns an alternative status code instead. The 303 status code indicates the redirect must use a GET method, while the 307 status code requires preserving the original method.
Common triggers for 302 responses include HTTP-to-HTTPS upgrades (often better served by 301), URL normalization (trailing slash), A/B testing, geolocation-based content routing, and temporary maintenance redirects.
Note
A 302 is a successful redirect, not an error.
The server found the resource and is directing
the client to the current location. To resolve
unwanted 302 redirects: verify the redirect is
intentional, convert to 301 if the move is
permanent, and check CMS settings or
.htaccess for unintended rules.
Cacheability
A 302 response is not cacheable by default.
Unlike 301 and 308, a 302 requires
explicit Cache-Control or Expires headers
to be stored by caches.
SEO impact
Google treats a 302 as a weak signal the redirect target is the preferred URL, unlike 301 which is a strong signal. Google processes either the source or the target URL. A 302 persisting over a prolonged period is eventually treated as equivalent to a 301 and ranking signals transfer accordingly. Bing holds ranking signals on the original URL for 302 redirects. If a 302 consistently points to the same destination across multiple crawls, Bing starts treating the redirect as a 301 Moved Permanently.
Example
The client requests a resource temporarily moved. The server indicates the new location and supplies a relevant message for client-side display.
Request
GET /news.html HTTP/1.1
Host: www.example.re
Response
HTTP/1.1 302 Found
Location: http://www.example.re/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>
Code references
.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
See also
- RFC 9110: HTTP Semantics
- Google: HTTP status codes and network errors
- 303
- 307
- 301
- Redirects
- HTTP status codes