HTTP 303 See Other
3xx Redirection
- Home
- HTTP Status Codes
- 3xx
- 303
What is HTTP 303 See Other?
The 303 (See Other) status code indicates that the server is redirecting the user agent to a different resource that provides an indirect response to the request. The client should use GET to fetch the new resource. This is commonly used after a POST request to redirect to a results page, preventing form resubmission if the user hits refresh.
Common Use Cases
- Post-Redirect-Get (PRG) pattern for forms
- Redirecting to a payment confirmation page
- API redirect to a status endpoint
Usage Example
After processing a credit card payment via POST, return 303 See Other with a Location header pointing to a confirmation page. The browser will use GET to fetch the confirmation, so if the user hits refresh, the payment is not resubmitted — the confirmation page simply reloads.
// Laravel - Post-Redirect-Get pattern
return redirect()
->route('orders.confirm', $order)
->setStatusCode(303);
// Stripe-like payment redirect
return redirect('https://checkout.stripe.com/c/pay_123', 303);
Related Status Codes
Common Mistakes
Mistake: Using 303 when the method must be preserved
Fix: 303 always forces GET on the redirected request, regardless of the original method. If you need to preserve POST, PUT, or DELETE through the redirect, use 307 Temporary Redirect instead.
Mistake: Returning a body with a 303 response
Fix: Do not include a response body with 303. The client should follow the Location header. Any body content will be ignored by the browser.