3xx Redirection · RFC 9110 §15.4.4

303 See Other

The result is at another URL; fetch it with GET.

What 303 means

The correct code for the post/redirect/get pattern: after a POST, send the browser to a page it should load with GET, so a refresh does not resubmit the form.

Unlike 302, the method change to GET is guaranteed by the specification rather than by browser habit.

Common causes

  • A form submission that redirects to a confirmation or listing page.
  • An async job endpoint pointing the client at the result.

How to fix it

  • Nothing to fix; it is the intended behaviour. Make sure the Location target is fetchable with GET.

What it looks like

A typical response:

HTTP/1.1 303 See Other
Location: /orders/8f3a

The same event in an nginx access log (the status is the number after the request line):

203.0.113.7 - - [10/Sep/2026:10:12:01 +0000] "GET /api/orders HTTP/1.1" 303 153 "-" "Mozilla/5.0"

Check it with curl

-i prints the status line and headers, and -w '%{http_code}' prints only the number, which is handy in scripts and health checks. Replace the URL with yours:

curl -i -L --max-redirs 5 https://example.com/old-path

Compare what curl sees with what the browser sees. A different status from the same URL usually means a cache, a CDN edge or a cookie is in the way.

Investigating a run of 303s? Paste the log excerpt into Log Share to get line numbers, highlighting and an expiring link for whoever is on call with you.

  • 302Found: A temporary redirect; clients should keep using the original URL in future.
  • 307Temporary Redirect: A temporary redirect that preserves the request method and body.
  • 201Created: The request created a new resource, identified by the Location header.

FAQ

302 or 303 after a POST?

303. It says explicitly that the next request is a GET, which is what you want after a form post.