302 vs 303: Found vs See Other
302 and 303 can look similar in logs, but they tell clients, crawlers, and API consumers different things.
| Aspect | HTTP 302 โ Found | HTTP 303 โ See Other |
|---|---|---|
| Definition | The resource is temporarily available at a different URL. Unlike 301, clients should continue using the original URL for future requests. Historically misused โ prefer 307 (method-preserving) or 303 (POST/redirect/GET) for more explicit semantics. | Used after a POST to redirect the user to a result page. Prevents form resubmission on browser reload. This is the Post/Redirect/Get (PRG) pattern. |
| Plain-language summary | The resource is temporarily available at a different URL. The original URL remains valid and the client should continue using it for future requests. Unlike 301, browsers do not cache 302 redirects, and search engines do not transfer SEO signals. Historically, browsers changed POST to GET on 302, which is technically incorrect but widely implemented. | HTTP 303 See Other redirects the client to retrieve the response from a different URL using GET, regardless of the original method. |
| When to use | Use 302 for temporary redirects where the original URL should be preserved. Prefer 307 when you need to guarantee method preservation (POST stays POST). Use 303 for Post/Redirect/Get (PRG) patterns after form submission. Never use 302 for permanent URL changes โ that is a 301. | HTTP 303 See Other redirects the client to retrieve the response from a different URL using GET, regardless of the original method. |
| Client behavior | Browsers follow the redirect automatically and typically change POST to GET (historical, widely-implemented non-spec behavior). The redirect is not cached; each visit to the original URL re-checks the server for a redirect. Crawlers visit the original URL again in future crawls rather than updating their index. | Client handles 303 according to redirect-codes semantics. |
| Caching behavior | Not cached by default. Each request to the original URL hits the server and may receive a different destination. You can add Cache-Control headers to cache 302s, but this is rarely appropriate for truly temporary redirects. | See 303 caching spec. |
| SEO / crawler impact | Search crawlers interpret 302 (redirect-codes) for indexation and link equity accordingly. | Search crawlers interpret 303 (redirect-codes) for indexation and link equity accordingly. |
| API / backend impact | API clients branching on 302 expect Found semantics. | API clients branching on 303 expect See Other semantics. |
| Safe to retry? | Follow redirect, then retry original intent | Follow redirect, then retry original intent |
Common real-world scenarios
When you see HTTP 302
Appears in login flows, feature flags, A/B testing, short-term promotional redirects, and geographic routing. Common in access logs during marketing campaigns or seasonal routing. Watch for 302s that have been "temporary" for months โ if the destination is permanent, convert to 301 and recover the lost SEO signals.
When you see HTTP 303
303 appears in production when: Resource moved to a different URI; Canonicalization or routing rule.
Decision rule
Use 302 when the response should communicate found behavior; use 303 when see other is the accurate protocol signal.
A frequent mistake is swapping 302 and 303 for convenience; that causes client retry bugs, incorrect cache signals, and misleading monitoring data.
Use 302 when the correct protocol signal is Found. Use 303 when the correct signal is See Other. Returning either code for the wrong reason breaks client expectations, cache behavior, and monitoring accuracy.
FAQ
What is the biggest difference between 302 and 303?
302 communicates Found, while 303 communicates See Other. Choosing the right one keeps clients and intermediaries predictable.
Do 302 and 303 have SEO or caching impact?
Yes. Search engines and caches interpret status classes differently. Use each code according to its semantics to avoid accidental indexing, stale responses, or crawl inefficiency.
Can APIs safely return 302 instead of 303?
Only when it matches contract semantics. API clients often branch logic by exact code, so swapping them can break retries, auth handling, or user-facing errors.
Full guides
HTTP 302 Found โ full guide ยท HTTP 303 See Other โ full guide ยท All comparisons ยท HTTP 302 status reference ยท HTTP 303 status reference