DevToolsmith

HTTP 303 See Other

HTTP 303 See Other redirects the client to another URL, which it should fetch with GET. The client must take further action, usually following a redirect.

Class
3xx Redirection
Standard
RFC 9110
Cacheable by default
No
Safe to retry
Not applicable: this isn’t an error
Go constant
http.StatusSeeOther

What HTTP 303 means

303 is the correct response after a successful form POST: redirect to a result page that the browser loads with GET. Refreshing that page then doesn’t resubmit the form. This is the Post/Redirect/Get pattern.

Retrying

Not applicable: this isn’t an error.

Example response

HTTP/1.1 303 See Other
Date: Wed, 21 Oct 2026 10:30:00 GMT
Location: /orders/1001

How to return 303

Node.js (Express)
res.redirect(303, '/new-path');
Python (FastAPI)
from fastapi.responses import RedirectResponse

return RedirectResponse("/new-path", status_code=303)
Go (net/http)
http.Redirect(w, r, "/new-path", http.StatusSeeOther)
nginx
location /old-path {
    return 303 /new-path;
}

Related status codes

Other 3xx status codes

300 Multiple Choices · 301 Moved Permanently · 302 Found · 304 Not Modified · 307 Temporary Redirect · 308 Permanent Redirect

See the full list of HTTP status codes.

Sources

Spotted a mistake? Email hello@devtoolsmith.com and we’ll fix it.

Frequently asked questions

What does HTTP 303 See Other mean?

HTTP 303 See Other redirects the client to another URL, which it should fetch with GET. 303 is the correct response after a successful form POST: redirect to a result page that the browser loads with GET. Refreshing that page then doesn’t resubmit the form. This is the Post/Redirect/Get pattern.