---
title: 302 Found
description: What HTTP 302 means, how it differs from 301 and 307, and the classic mistakes made with temporary redirects.
canonical: https://watchfor.io/docs/reference/http-status-codes/302
---

# 302 Found

What HTTP 302 means, how it differs from 301 and 307, and the classic mistakes made with temporary redirects.

**302 Found** is a temporary redirect: the resource currently lives at the URL
in the `Location` header, but the client should keep using the original URL for
future requests. Browsers don't cache it long-term and search engines keep the
original URL indexed.

## 302 vs 301 vs 307

| Code | Permanence | Method preserved? |
| --- | --- | --- |
| 301 | Permanent | No (may become GET) |
| **302** | Temporary | No (may become GET) |
| 307 | Temporary | Yes |
| 308 | Permanent | Yes |

The "method preserved" column is the subtle one: historically browsers turned a
POST that hit a 302 into a GET at the new location. If you redirect form
submissions or API calls and need the method and body to survive, use 307.

## Typical legitimate uses

- Post-login redirects and OAuth flows
- A/B tests and geo-based routing to a variant page
- Maintenance pages that will revert (though
  [503](/docs/reference/http-status-codes/503) is more correct for crawlers)
- "Random" or "latest" URLs that resolve to a changing target

## Common problems

- **302 where 301 was intended** — after a permanent migration, a lingering 302
  means search engines keep the old URL indexed and don't transfer ranking.
  Audit migrations with a redirect-chain check.
- **Login-wall redirects breaking monitors** — a health check that follows a
  302 to `/login` and reports 200 is testing your login page, not your app.
  Assert on the final URL or expect the 302 explicitly.
- **Redirect loops** — session logic that bounces between `/login` and
  `/dashboard` when a cookie is missing.

## Debugging

Trace the chain with the free [HTTP header checker](/http-header-checker) —
every hop, status and `Location` header. In an
[HTTP monitor](/docs/monitors/web) you can pin the expectation: either "this
URL returns 302 to exactly this target" or "following redirects ends at 200 on
this final URL".

---

Canonical page: https://watchfor.io/docs/reference/http-status-codes/302 · All docs: https://watchfor.io/docs · Site guide: https://watchfor.io/llms.txt
