Skip to content

303 See Other

Description

The 303 See Other status code indicates that the server is redirecting the client to a different resource, typically as a result of a POST, PUT, or DELETE operation. This status code specifically instructs the client to retrieve the redirected resource using a GET request, regardless of the original request method.

This status code is particularly useful for implementing the "Post/Redirect/Get" pattern, which helps prevent duplicate form submissions. After a form is submitted via POST, the server responds with a 303 See Other redirect to a confirmation or result page that should be accessed via GET.

The 303 See Other status differs from 302 Found in that it explicitly specifies that the client should use a GET request for the new URI, regardless of what method was used in the original request.

Syntax

The server responds with a 303 See Other status and includes the location of the different resource:

HTTP/1.1 303 See Other
Location: https://example.com/result-page
Content-Type: text/html
Content-Length: [length in bytes]

[Optional response body with a hyperlink to the different resource]

Examples

Form Submission Example

A client submits a form to create a new resource:

Client Request:

POST /products HTTP/1.1
Host: store.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 57

name=New+Product&price=29.99&category=Electronics

Server Response:

HTTP/1.1 303 See Other
Location: https://store.example.com/products/456
Content-Type: text/html
Content-Length: 174

<!DOCTYPE html>
<html>
<head>
  <title>See Other</title>
</head>
<body>
  <p>Resource created. Redirecting to <a href="https://store.example.com/products/456">product page</a>.</p>
</body>
</html>

The client should then make a GET request to the URL specified in the Location header.

Payment Processing Example

A client submits a payment form:

Client Request:

POST /checkout/payment HTTP/1.1
Host: shop.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 187

card_number=4111111111111111&expiry=12%2F2025&cvv=123&name=John+Doe

Server Response:

HTTP/1.1 303 See Other
Location: https://shop.example.com/orders/789/confirmation
Content-Type: text/html
Content-Length: 192

<!DOCTYPE html>
<html>
<head>
  <title>Payment Processed</title>
</head>
<body>
  <p>Payment successful. Redirecting to <a href="https://shop.example.com/orders/789/confirmation">order confirmation</a>.</p>
</body>
</html>

Resource Deletion Example

A client sends a request to delete a resource:

Client Request:

DELETE /documents/123 HTTP/1.1
Host: docs.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Server Response:

HTTP/1.1 303 See Other
Location: https://docs.example.com/documents
Content-Type: text/html
Content-Length: 168

<!DOCTYPE html>
<html>
<head>
  <title>Document Deleted</title>
</head>
<body>
  <p>Document successfully deleted. Redirecting to <a href="https://docs.example.com/documents">document list</a>.</p>
</body>
</html>

Summary

The 303 See Other status code is a powerful tool for implementing the Post/Redirect/Get pattern, which improves user experience by preventing accidental form resubmissions and ensuring that bookmarkable, shareable URLs are provided after form submissions. By explicitly instructing the client to use a GET request for the redirected resource, it helps maintain proper HTTP method semantics and ensures that the redirected page can be safely refreshed, bookmarked, and shared. This status code is particularly valuable for web applications that process form submissions, handle payments, or perform other state-changing operations.