HTTP

HTTP 303 See Other vs 412 Precondition Failed

HTTP 303 (See Other) is a 3xx Redirection response, while 412 (Precondition Failed) is a 4xx Client Error response. 303 indicates that the server is redirecting to a different resource using GET, typically after a POST operation (Post/Redirect/Get pattern). In contrast, 412 means that one or more conditions in the request headers (If-Match, If-Unmodified-Since) evaluated to false.

Description

The server is redirecting to a different resource using GET, typically after a POST operation (Post/Redirect/Get pattern).

When You See It

After form submissions to prevent resubmission on browser refresh.

How to Fix

Follow the Location header with a GET request. This is intentional — part of the PRG pattern.

Description

One or more conditions in the request headers (If-Match, If-Unmodified-Since) evaluated to false.

When You See It

When using conditional requests with ETags and the resource has changed.

How to Fix

Refresh the ETag/Last-Modified value and retry with updated preconditions.

Key Differences

1.

303 is a 3xx Redirection response, while 412 is a 4xx Client Error response.

2.

HTTP 303: The server is redirecting to a different resource using GET, typically after a POST operation (Post/Redirect/Get pattern).

3.

HTTP 412: One or more conditions in the request headers (If-Match, If-Unmodified-Since) evaluated to false.

4.

You encounter 303 when after form submissions to prevent resubmission on browser refresh.

5.

You encounter 412 when when using conditional requests with ETags and the resource has changed.

When to Use Which

For 303 (See Other): Follow the Location header with a GET request. This is intentional — part of the PRG pattern. For 412 (Precondition Failed): Refresh the ETag/Last-Modified value and retry with updated preconditions.

Learn More