303 See Other

Redirection - Follow with GET to different URI

HTTP 303 See Other

What It Means

The HTTP 303 See Other status code indicates that the response to the request can be found at a different URI. The client should use GET to retrieve the resource at the new location, regardless of the original request method.

The PRG Pattern

303 is essential for the Post/Redirect/Get (PRG) pattern, which prevents duplicate form submissions:

# 1. User submits form
POST /orders HTTP/1.1
Content-Type: application/x-www-form-urlencoded

product=widget&quantity=5

# 2. Server creates order and redirects
HTTP/1.1 303 See Other
Location: /orders/12345

# 3. Browser follows redirect with GET
GET /orders/12345 HTTP/1.1

# 4. User sees confirmation page
HTTP/1.1 200 OK
Content-Type: text/html

<h1>Order #12345 confirmed!</h1>

Why PRG Matters

  • Prevents double-submit: Refreshing the page won't resubmit the form
  • Clean URLs: User's address bar shows the result page, not the action
  • Bookmarkable: The confirmation page can be bookmarked
  • Back button works: No "resubmit form?" warnings

303 vs Other Redirects

Code Method Use Case
301 Preserve Permanent URL change
302 Usually GET* Temporary redirect (ambiguous)
303 Always GET After POST (PRG pattern)
307 Preserve Temporary, keep method

*302 behavior varies by browser, 303 is explicit

Key Difference from 307

303 explicitly changes the method to GET, while 307 preserves the original method. Use 303 when redirecting after a POST to show a result page; use 307 when temporarily moving an API endpoint that should keep the same method.

Frequently Asked Questions

What is HTTP 303 See Other?
HTTP 303 See Other is a redirect response that tells the client to retrieve the resource at a different URI using a GET request, regardless of the original request method. It is the correct status code for the Post/Redirect/Get (PRG) pattern, which prevents duplicate form submissions.
What is the PRG (Post/Redirect/Get) pattern?
PRG is a web design pattern where after a POST request (like submitting a form or payment), the server responds with 303 See Other redirecting to a GET endpoint (like a confirmation page). This prevents the form from being resubmitted if the user refreshes the page or clicks back.
What is the difference between 303 and 302?
303 explicitly requires the client to use GET for the redirect, regardless of the original method. 302 Found has ambiguous behavior, as the spec says to preserve the method but browsers historically changed POST to GET. 303 was created to make this method-changing behavior explicit and unambiguous.
When should I use 303 vs 307?
Use 303 when you want the redirect to always use GET (e.g., after a POST to show a result page). Use 307 when you want the redirect to preserve the original HTTP method (e.g., temporarily moving an API endpoint where POST should remain POST). 303 changes the method; 307 preserves it.
Do all browsers support 303 See Other?
Yes, all modern browsers support 303 See Other correctly. It has been part of HTTP/1.1 since 1999. Even very old browsers handle it properly. It is the safest choice for post-submission redirects because its behavior is unambiguous, unlike 302 which has historical inconsistencies.

Monitor your API redirects

UptimeSignal follows redirects and verifies your endpoints respond correctly.

Start monitoring free →

Related Status Codes

More Resources