HTTP 303 See Other — Post-Redirect-Get Pattern
Informational3xx redirection
Overview
HTTP 303 See Other tells the client to retrieve the resource at a different URI using a GET request, commonly used after POST form submissions.
Key Details
- 303 explicitly requires the client to use GET for the redirect, regardless of original method
- Core of the Post/Redirect/Get (PRG) pattern preventing duplicate form submissions
- Unlike 302, the HTTP spec guarantees the redirected request will be GET
- The redirect target is specified in the Location header
- Browser will not resubmit POST data when following a 303 redirect
Common Causes
- Server redirecting after successful form POST to prevent resubmission on refresh
- API endpoint redirecting to a result page after processing
- OAuth flow redirecting back to application after authorization
- Server converting a non-GET request to a GET for the response resource
Steps
- 1If you receive 303 unexpectedly, check the Location header for the redirect target
- 2Implement PRG pattern: POST to /submit → 303 redirect → GET /success
- 3In your server code, return 303 status with Location header after processing POST
- 4Ensure your HTTP client follows redirects and switches to GET method
- 5Test with curl -v -L to see the full redirect chain and method switching
Tags
http303see-otherpost-redirect-getform-submission
More in 3xx Redirection
http-300-multiple-choicesHTTP 300 Multiple Choices — What It Means & How to Fix It
Warninghttp-301-moved-permanentlyHTTP 301 Moved Permanently — What It Means & How to Fix It
Warninghttp-302-foundHTTP 302 Found — What It Means & How to Fix It
Warninghttp-303-see-otherHTTP 303 See Other — What It Means & How to Fix It
Warninghttp-304-not-modifiedHTTP 304 Not Modified — What It Means & How to Fix It
Warninghttp-305-use-proxyHTTP 305 Use Proxy — What It Means & How to Fix It
WarningFrequently Asked Questions
303 guarantees the redirect uses GET, while 302 technically should preserve the method (though browsers often switch to GET anyway).