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.
Related status codes
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.