HTTP Status 412 - Precondition Failed

Der HTTP-Status-Code 412 Precondition Failed signalisiert, dass mindestens eine Precondition aus den Request-Headern (If-Match, If-Unmodified-Since) nicht erfüllt ist. Server weigert sich, Request auszuführen. Wichtig für Optimistic Locking und Conditional Requests.

Typ

Response-Status-Code

Syntax

Der Status Code wird zurückgegeben bei Precondition Failure.

http
HTTP/1.1 412 Precondition Failed
ETag: "current-version"

Direktiven

Der 412 Precondition Failed Status Code wird für Conditional Request Failures verwendet.

Precondition Evaluation
Server prüft If-Match, If-Unmodified-Since, If-None-Match, If-Modified-Since Headers. Wenn Precondition false ist, returned Server 412 ohne Request zu verarbeiten.
Optimistic Locking
Primär für Updates mit If-Match ETag. Verhindert Lost Updates bei Concurrent Modifications. Unterscheidet sich von 409, wo State-Conflict nach Validation auftritt.
Safe Failure
Request wird nicht ausgeführt wenn Precondition fails. Garantiert, dass Operation nur durchgeführt wird wenn Resource in erwartetem State ist.

Beispiele

Nachfolgend finden Sie praktische Anwendungsbeispiele für Status 412.

Beispiel 1 If-Match ETag Mismatch

http
PUT /api/documents/doc-1 HTTP/1.1
Host: api.example.com
If-Match: "old-version-abc"
Content-Type: application/json

{"content": "Updated"}

HTTP/1.1 412 Precondition Failed
ETag: "current-version-xyz"
Content-Type: application/json

{
  "error": "precondition_failed",
  "message": "Resource was modified, ETag mismatch",
  "expected_etag": "old-version-abc",
  "current_etag": "current-version-xyz"
}

Beispiel 2 If-Unmodified-Since Failure

http
DELETE /api/files/file-123 HTTP/1.1
Host: api.example.com
If-Unmodified-Since: Wed, 01 Oct 2025 10:00:00 GMT

HTTP/1.1 412 Precondition Failed
Last-Modified: Wed, 01 Oct 2025 14:00:00 GMT
Content-Type: application/json

{
  "error": "modified_since",
  "message": "File was modified after specified time",
  "last_modified": "2025-10-01T14:00:00Z"
}

Beispiel 3 Multiple Preconditions

http
POST /api/orders/789/ship HTTP/1.1
Host: api.example.com
If-Match: "v1"
If-Unmodified-Since: Wed, 01 Oct 2025 12:00:00 GMT

HTTP/1.1 412 Precondition Failed
ETag: "v2"
Last-Modified: Wed, 01 Oct 2025 13:00:00 GMT

Precondition Check Flow

412 Precondition Failed verhindert concurrent Update

Vorteile für die Systemarchitektur

  • Optimistic Locking: Verhindert Lost Updates ohne Pessimistic Locks. Client kann Precondition Failures erkennen und User Merge/Retry anbieten.
  • Safe Operations: Request wird nicht ausgeführt wenn Preconditions fehlschlagen. Garantiert, dass Mutations nur auf erwarteten Resource State angewendet werden.
  • Conditional Cache Validation: Für If-None-Match mit GET ermöglicht 412 Cache-Validation. Client erhält klares Signal, dass gecachte Version nicht mehr gültig ist.

Spezifikation

RFC 9110, Section 15.5.13 – HTTP Semantics https://www.rfc-editor.org/rfc/rfc9110.html#name-412-precondition-failed

Weitere Spezifikationen

If-Match Header, If-Unmodified-Since Header, If-Modified-Since Header