412 Precondition Failed

Ein bedingter Header hat nicht gepasst.

Wann du ihn verwendest

If-Match mit einem veralteten ETag, um verlorene Updates zu verhindern.

Häufige Ursachen und Lösungen

412 bedeutet, dass eine Bedingung, die der Client mitgeschickt hat, nicht erfüllt war. Meist ist es If-Match mit einem ETag, das nicht mehr passt, weil jemand anderes die Ressource zuerst aktualisiert hat, und der Server weigert sich, dessen Änderung zu überschreiben. Der Client sollte die aktuelle Version per GET holen, zusammenführen oder den Benutzer fragen und es dann mit dem neuen ETag erneut versuchen. If-Unmodified-Since macht dasselbe mit Datumsangaben.

If-Match verlangt einen starken Vergleich, daher passen schwache ETags mit dem Präfix W/ nie, und Proxys, die Antworten komprimieren, können ETags abschwächen, sodass jeder Schreibvorgang mit 412 scheitert. Umgekehrt lässt If-None-Match: * bei einem PUT das Anlegen mit 412 scheitern, wenn die Ressource schon existiert, ein günstiger Schutz gegen Überschreiben. S3 und Google Cloud Storage nutzen 412 ebenfalls für ihre bedingten Schreibvorgänge.

Client-Fehler (4xx)

4xx-Codes sind Client-Fehler: Die Anfrage selbst ist fehlerhaft, nicht autorisiert oder verweist auf etwas, das es nicht gibt. Dieselbe Anfrage erneut zu senden hilft nicht.

So sieht es aus

HTTP/1.1 412 Precondition Failed

So sendest du ihn

Node.js / Expressres.status(412).end()
Python / Flaskreturn '', 412
nginxreturn 412;

So prüfst du ihn

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP-Statuscodes öffnen