Error Codes Wiki

HTTP 303 See Other — Post-Redirect-Get Pattern

Informational3xx redirection

About HTTP 303 See Other

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. This guide covers everything you need to know about this topic, including common causes, step-by-step solutions, and answers to frequently asked questions.

Here are the key things to understand: 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. Understanding these fundamentals will help you diagnose and resolve this issue more effectively.

The most common reasons this occurs include: 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. Identifying the root cause is the first step toward finding the right solution.

To resolve this, follow these recommended steps: If you receive 303 unexpectedly, check the Location header for the redirect target. Implement PRG pattern: POST to /submit → 303 redirect → GET /success. In your server code, return 303 status with Location header after processing POST. Ensure your HTTP client follows redirects and switches to GET method. Test with curl -v -L to see the full redirect chain and method switching. If these steps do not resolve the issue, consider consulting additional resources or a qualified professional.

This article is part of our HTTP Status Codes collection on Error Codes Wiki. We provide comprehensive, up-to-date information to help you find solutions quickly.

Quick Answer

What is the difference between 302 and 303?

303 guarantees the redirect uses GET, while 302 technically should preserve the method (though browsers often switch to GET anyway).

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

  1. 1If you receive 303 unexpectedly, check the Location header for the redirect target
  2. 2Implement PRG pattern: POST to /submit → 303 redirect → GET /success
  3. 3In your server code, return 303 status with Location header after processing POST
  4. 4Ensure your HTTP client follows redirects and switches to GET method
  5. 5Test with curl -v -L to see the full redirect chain and method switching

Tags

http303see-otherpost-redirect-getform-submission

More in 3xx Redirection

Frequently Asked Questions

303 guarantees the redirect uses GET, while 302 technically should preserve the method (though browsers often switch to GET anyway).