303 See Other

Fetch the result from another address with GET.

Code
303
Reason phrase
See Other
Class
3xx Redirection
Defined in
RFC 9110 section 15.4.4
Cacheable by default
No

What it means

Redirection: the client has to take another step, usually following a Location header, to complete the request.

When a server should send it. After a POST, to send the browser to a page showing the result. This is the Post/Redirect/Get pattern: refreshing the result page then repeats a harmless GET instead of resubmitting the form.

Common causes. The standard reply after a form POST, so refreshing the next page does not resubmit the form.

What to do. Follow the Location header with a GET.

How clients and crawlers treat it

Browsers and HTTP clients. Clients always follow it with GET (or HEAD), whatever the original method was, and the redirect itself is not cached.

Google Search. Treated like 302: a weak signal that the redirect target should be canonical. Source: Google Search Central, How HTTP status codes, and network and DNS errors affect Google Search.

Caching. Not cacheable by default (RFC 9110 section 15.1 does not list it). A cache stores it only when the response says so with Cache-Control or Expires.

Example response

HTTP/1.1 303 See Other
Location: /orders/1042/thanks

See Other

How to send 303

nginx
location = /old-page {
    return 303 https://example.com/new-page;
}
Apache (.htaccess)
Redirect 303 /old-page https://example.com/new-page
PHP
header('Location: https://example.com/new-page', true, 303);
exit;
Node.js
res.writeHead(303, { Location: 'https://example.com/new-page' });
res.end();
Python (Flask)
from flask import redirect

return redirect('https://example.com/new-page', code=303)

Change the paths to suit. In nginx, add_header needs always to apply to error responses.

Related codes

All status codes · All 3xx codes

Names and numbers from the IANA HTTP Status Code Registry. Google Search behaviour as documented by Google Search Central.