Statuscode 428: Precondition Required - Der Lost Update Verhinderer

INEZA Felin-Michel

INEZA Felin-Michel

21 October 2025

Statuscode 428: Precondition Required - Der Lost Update Verhinderer

Apidog für Unternehmen

On-Premises Bereitstellung

SSO & RBAC

SOC 2 konform

Apidog Enterprise entdecken

Sie arbeiten mit einem Kollegen an einem wichtigen Dokument in einem webbasierten Editor. Sie beide öffnen dasselbe Dokument gleichzeitig. Sie verbringen 30 Minuten damit, die Einleitung sorgfältig neu zu schreiben, während Ihr Kollege am Fazit arbeitet. Sie klicken zuerst auf „Speichern“, und Ihre Änderungen werden akzeptiert. Dann klickt Ihr Kollege auf „Speichern“, und seine Version überschreibt Ihre brillante neue Einleitung vollständig und ohne Warnung. Ihre Arbeit ist soeben dem „Lost Update Problem“ zum Opfer gefallen.

Dieses frustrierende Szenario ist genau das, was der HTTP-Statuscode 428 Precondition Required verhindern soll. Er ist einer der ausgefeilteren und proaktiveren Statuscodes in der HTTP-Spezifikation und dient als Schutzmechanismus für Ressourcen, die möglicherweise von mehreren Benutzern gleichzeitig geändert werden.

Er gehört nicht zu den üblichen Verdächtigen, spielt aber dennoch eine unglaublich wichtige Rolle bei der sicheren, zuverlässigen und gleichzeitigen API-Kommunikation.

Was genau bedeutet also der HTTP-Statuscode 428 Precondition Required? Wann tritt er auf und wie kann man ihn richtig handhaben?

Stellen Sie sich ihn wie einen vorsichtigen Bibliothekar vor, der Ihnen ein Buch erst dann ausleiht, wenn Sie bestätigen, dass Sie wissen, welche Ausgabe Sie aktualisieren. Es ist die Art des Servers zu sagen: „Ich muss sicherstellen, dass Sie mit der aktuellsten Version dieser Ressource arbeiten, bevor ich Ihnen erlaube, Änderungen vorzunehmen.“

Wenn Sie kollaborative Anwendungen, APIs, die gleichzeitige Updates verarbeiten, oder Systeme entwickeln, bei denen Datenkonsistenz entscheidend ist, ist das Verständnis von 428 unerlässlich.

Genau das werden wir in diesem ausführlichen Artikel beleuchten, damit Sie nicht nur verstehen, was 428 bedeutet, sondern auch, warum es existiert und wie es Ihre APIs verbessern kann.

💡
Wenn Sie APIs entwickeln oder testen, die einen gleichzeitigen Zugriff sicher handhaben müssen, benötigen Sie ein Tool, das Ihnen hilft, diese komplexen Szenarien zu simulieren. Laden Sie Apidog kostenlos herunter; es ist eine All-in-One-API-Plattform, die das Testen bedingter Anfragen mit ETags und Headern vereinfacht und sicherstellt, dass Ihre Anwendung 428-Antworten korrekt verarbeiten kann.
button

Nun wollen wir untersuchen, wie HTTP 428 Precondition Required das Problem widersprüchlicher Updates löst.

Das Problem: Das gefürchtete Lost Update

Um zu verstehen, warum 428 existiert, müssen wir das Problem würdigen, das es löst. In Mehrbenutzersystemen können mehrere Probleme auftreten, wenn zwei oder mehr Personen versuchen, dieselbe Ressource etwa zur gleichen Zeit zu aktualisieren:

  1. Verlorene Updates: Das klassische Problem, bei dem der zweite Schreibvorgang den ersten überschreibt, ohne dessen Änderungen zu berücksichtigen.
  2. Widersprüchliche Änderungen: Zwei Benutzer nehmen unterschiedliche Änderungen an verschiedenen Teilen derselben Ressource vor.
  3. Veraltete Daten-Updates: Ein Benutzer nimmt Änderungen basierend auf veralteten Informationen vor.

Traditionelle Ansätze verlassen sich oft darauf, dass der Client „das Richtige tut“, indem er bedingte Header einfügt. Aber was, wenn der Client das vergisst? Der Code 428 ermöglicht es dem Server, gutes Verhalten zu erzwingen.

Was bedeutet HTTP 428 Precondition Required eigentlich?

Der Statuscode 428 Precondition Required zeigt an, dass der Ursprungsserver eine bedingte Anfrage erfordert. Es ist die Art des Servers, zu verlangen, dass der Client bedingte Header (wie If-Match oder If-Unmodified-Since) einfügen muss, um zu beweisen, dass er mit aktuellen Daten arbeitet.

Die Antwort sollte eine hilfreiche Erklärung enthalten, welche Vorbedingung erforderlich ist. Eine typische 428-Antwort sieht so aus:

HTTP/1.1 428 Precondition RequiredContent-Type: application/problem+json
{
  "type": "<https://example.com/probs/conditional-required>",
  "title": "Precondition Required",
  "detail": "This resource requires conditional requests. Please include an If-Match or If-None-Match header.",
  "instance": "/articles/123"
}

Der Server sagt im Wesentlichen: „Für diese spezielle Ressource akzeptiere ich keine blinden Updates. Sie müssen mir zeigen, dass Sie wissen, welche Version Sie zu ändern versuchen.“

Einfacher ausgedrückt erwartet der Server, dass der Client einen Vorbedingungs-Header wie If-Match oder If-Unmodified-Since einfügt, bevor er bereit ist, die Anfrage zu verarbeiten.

Wenn diese Vorbedingung nicht enthalten ist, wird der Server die Anfrage ablehnen und mit einem 428 Precondition Required-Fehler antworten.

Offizielle RFC-Definition

Der 428-Statuscode ist in RFC 6585 definiert, der mehrere zusätzliche HTTP-Statuscodes einführte, um die Webkommunikation und Zuverlässigkeit zu verbessern.

Hier ist, was es besagt:

„Der Statuscode 428 (Precondition Required) zeigt an, dass der Ursprungsserver eine bedingte Anfrage erfordert. Sein Zweck ist es, das Problem des ‚Lost Update‘ zu verhindern, bei dem ein Client den Zustand einer Ressource abruft, ihn ändert und ihn per PUT an den Server zurücksendet, während eine dritte Partei die Ressource in der Zwischenzeit geändert hat.“

Das ist eine Menge technischer Fachjargon, aber die Essenz ist einfach: Es geht um Datenintegrität und die Vermeidung von Überschreibungen, wenn mehrere Clients dieselbe Ressource gleichzeitig ändern.

Einfach erklärt

Stellen Sie sich dieses Szenario vor:

Sie bearbeiten ein Dokument in Google Docs mit Ihren Teamkollegen. Sie öffnen das Dokument, nehmen einige Änderungen vor und klicken auf Speichern – aber in der Zwischenzeit hat Ihr Teamkollege ebenfalls Änderungen vorgenommen und seine Version vor Ihnen gespeichert.

Ohne Versionskontrolle würden Ihre Änderungen die des Teamkollegen überschreiben. Genau das hilft der Statuscode 428 Precondition Required in APIs zu verhindern.

Er sagt den Clients:

„Bevor Sie diese Ressource ändern, beweisen Sie mir, dass Sie mit der neuesten Version arbeiten.“

Warum wurde 428 eingeführt?

In RESTful APIs und allgemeinen HTTP-Operationen können Clients eine Ressource lesen, lokal Änderungen vornehmen und dann eine Update-Anfrage senden. Wenn sich die Ressource jedoch in der Zwischenzeit geändert hat, birgt das blinde Anwenden des Updates das Risiko, neuere Änderungen zu überschreiben.

Indem Server von Clients verlangen, Vorbedingungen anzugeben, stellen sie sicher:

Dies ist entscheidend für APIs, die gleichzeitige Operationen oder mehrere Benutzer unterstützen.

Wie es funktioniert: Der bedingte Anfragefluss

Gehen wir ein vollständiges Beispiel durch, wie 428 hilft, verlorene Updates in einem kollaborativen Bearbeitungsszenario zu verhindern.

Schritt 1: Benutzer A ruft die Ressource ab

Benutzer A ruft das aktuelle Dokument ab:

GET /documents/123 HTTP/1.1

Der Server antwortet mit dem Dokument und fügt einen ETag-Header hinzu – eine eindeutige Kennung für diese spezifische Version der Ressource:

HTTP/1.1 200 OKContent-Type: application/jsonETag: "abc123"
{
  "id": 123,
  "title": "Project Proposal",
  "content": "Original content...",
  "version": "abc123"
}

Schritt 2: Benutzer B ruft dieselbe Ressource ab

Etwa zur gleichen Zeit fordert auch Benutzer B das Dokument an und erhält denselben ETag.

Schritt 3: Benutzer A versucht ein Update (ohne Bedingung)

Benutzer A versucht, das Dokument zu aktualisieren, vergisst aber, einen bedingten Header einzufügen:

PUT /documents/123 HTTP/1.1Content-Type: application/json
{
  "id": 123,
  "title": "Project Proposal",
  "content": "User A's updated content...",
  "version": "abc123"
}

Schritt 4: Die 428-Antwort des Servers

Da dieser Endpunkt so konfiguriert ist, dass er Vorbedingungen erfordert, antwortet der Server mit:

HTTP/1.1 428 Precondition RequiredContent-Type: application/json
{
  "error": "precondition_required",
  "message": "This resource requires conditional updates. Please include an If-Match header with the current ETag."
}

Schritt 5: Benutzer A versucht es erneut mit dem korrekten Header

Die Anwendung von Benutzer A sieht die 428-Antwort und versucht es automatisch erneut mit dem entsprechenden bedingten Header:

PUT /documents/123 HTTP/1.1Content-Type: application/jsonIf-Match: "abc123"
{
  "id": 123,
  "title": "Project Proposal",
  "content": "User A's updated content...",
  "version": "abc123"
}

Der Server verarbeitet diese bedingte Anfrage erfolgreich und gibt einen 200 OK mit einem neuen ETag zurück.

Schritt 6: Benutzer B versucht sein Update

Wenn Benutzer B versucht, mit seinem veralteten ETag zu aktualisieren, kann der Server dies nun mit einem 412 Precondition Failed ablehnen und so das verlorene Update verhindern.

428 vs. 412 Precondition Failed: Den Unterschied verstehen

Dies ist ein entscheidender Unterschied in der Welt der bedingten Anfragen:

Analogie:

Warum der 428 Precondition Required Status existiert

Auf den ersten Blick mag es wie ein Aufwand erscheinen. Warum sollten Clients nicht einfach frei aktualisieren dürfen?

Nun, der 428-Status existiert aus gutem Grund: um Datenverlust zu verhindern und Konsistenz in verteilten Systemen zu gewährleisten.

Lassen Sie uns seinen Zweck genauer untersuchen.

1. Vermeidung verlorener Updates

Das Problem des „Lost Update“ tritt auf, wenn mehrere Clients dieselbe Ressource abrufen und unabhängig voneinander aktualisieren. Ohne Vorbedingungen könnte das Update eines Clients das eines anderen stillschweigend überschreiben.

428 stellt sicher, dass jede Änderung überprüft, ob sich die Ressource seit dem Abruf geändert hat, wodurch stillschweigender Datenverlust verhindert wird.

2. Gewährleistung der Datenintegrität

Indem der Server Vorbedingungen wie If-Match verlangt, garantiert er, dass Updates nur auf die korrekte Version einer Ressource angewendet werden. Es ist, als würde man ein Sicherheitsschloss an seine Daten anbringen.

3. Förderung sicherer Parallelität

In Systemen, in denen viele Benutzer mit gemeinsamen Ressourcen interagieren – denken Sie an kollaborative Bearbeitung, API-Integrationen oder RESTful-Dienste – macht 428 das Parallelitätsmanagement vorhersehbarer und sicherer.

4. Förderung bewährter Verfahren

Durch die Erzwingung bedingter Anfragen drängt der Server Entwickler dazu, bewährte RESTful-Designpraktiken zu befolgen, wie die Verwendung von ETags, bedingten GETs und Versionsprüfungen.

Wann sollte 428 Precondition Required verwendet werden?

Sie sollten die Verwendung von 428 in diesen Szenarien in Betracht ziehen:

1. Kollaborative Bearbeitungsanwendungen

Anwendungen im Stil von Google Docs, bei denen mehrere Benutzer dasselbe Dokument gleichzeitig bearbeiten könnten.

2. Ressourcen mit hoher Konkurrenz

Jede Ressource, die häufige Updates von mehreren Quellen erhält, wie zum Beispiel:

3. Updates sensibler Daten

Ressourcen, bei denen versehentliche Überschreibungen schwerwiegende Folgen haben könnten, wie Finanzunterlagen oder medizinische Daten.

4. API-Design für Sicherheit

Wenn Sie gutes Client-Verhalten erzwingen und häufige Parallelitätsprobleme verhindern möchten.

Praxisbeispiele für 428 Precondition Required

1. Gleichzeitige API-Bearbeitung

Wenn mehrere Clients denselben Datensatz gleichzeitig ändern, stellt 428 sicher, dass sich die Updates nicht gegenseitig überschreiben.

2. Versionierte APIs

APIs, die sich im Laufe der Zeit entwickeln, können Vorbedingungen erzwingen, um zu gewährleisten, dass Clients kompatible Versionen verwenden.

3. Optimistische Sperrsysteme

Datenbanken oder REST-APIs, die ETags zur optimistischen Parallelitätskontrolle verwenden, verlassen sich auf Vorbedingungen, um Konflikte zu erkennen.

4. Datei- oder Objektspeicher-APIs

Cloud-Speichersysteme wie S3 verwenden bedingte Anfragen intensiv – 428 wäre eine natürliche Wahl, um solche Regeln durchzusetzen.

APIs mit Apidog testen

Apidog Werbematerial 11

Wenn es um die Parallelitätskontrolle geht, wird Apidog zu Ihrer Geheimwaffe. Das Testen bedingter Anfragesequenzen erfordert eine sorgfältige Einrichtung und mehrere Schritte. Apidog ist für diese Art von Tests perfekt geeignet.

Mit Apidog können Sie:

Header-Management automatisieren: Verwenden Sie die Umgebungsvariablen von Apidog, um ETag-Werte automatisch zu speichern und über Anfragen hinweg wiederzuverwenden.

Race Conditions simulieren: Erstellen Sie Testsuiten, die mehrere Benutzer simulieren, die dieselbe Ressource aktualisieren, indem sie parallele Anfragen mit verschiedenen ETags senden.

Fehlerantworten validieren: Stellen Sie sicher, dass Ihre 428-Antworten hilfreiche Fehlermeldungen enthalten, die Clients anleiten, was sie anders machen müssen.

Client-Resilienz testen: Überprüfen Sie, ob Ihre Client-Anwendungen 428-Antworten korrekt verarbeiten, indem sie mit den entsprechenden bedingten Headern erneut versuchen.

button

Bewährte Implementierungspraktiken

Für Server-Entwickler:

Für Client-Entwickler:

Das größere Bild: Robuste APIs erstellen

Der Statuscode 428 Precondition Required stellt eine Verschiebung hin zu robusteren, selbstdokumentierenden APIs dar. Indem Sie von Clients verlangen, bedingte Anfragen zu verwenden, erreichen Sie:

  1. Datenverlust verhindern: Eliminierung ganzer Kategorien von Parallelitätsfehlern
  2. API-Sicherheit verbessern: Es wird für Clients schwieriger, Daten versehentlich zu beschädigen
  3. Bewährte Verfahren durchsetzen: Clients zu korrekten Nutzungsmustern führen
  4. Bessere Diagnosen bereitstellen: Klares Feedback geben, wenn Clients Fehler machen

Fazit: Von reaktiver zu proaktiver Fehlerbehandlung

Der HTTP-Statuscode 428 Precondition Required verwandelt die Parallelitätskontrolle von einer optionalen bewährten Methode in eine durchsetzbare Anforderung. Er verschiebt die Fehlerbehandlung von reaktiv („Ihr Update stand im Konflikt mit dem eines anderen“) zu proaktiv („Sie müssen beweisen, dass Sie mit aktuellen Daten arbeiten, bevor ich Ihr Update überhaupt in Betracht ziehe“).

Obwohl es wie ein zusätzlicher Schritt erscheinen mag, führt dieser Ansatz letztendlich zu zuverlässigeren Anwendungen und zufriedeneren Benutzern, die ihre Arbeit nicht durch stille Datenkorruption verlieren.

Für Entwickler, die moderne Webanwendungen erstellen, ist das Verständnis und die Implementierung von 428 ein Zeichen von Raffinesse im API-Design. Es zeigt, dass Sie nicht nur darüber nachdenken, was Ihre API tut, sondern auch, wie sie sich unter realen Bedingungen mit mehreren Benutzern verhält.

Und wenn Sie bereit sind, diese ausgeklügelten Parallelitätskontrollen zu implementieren und zu testen, bietet ein leistungsstarkes Tool wie Apidog die Testumgebung, die Sie benötigen, um sicherzustellen, dass Ihre bedingte Anfragelogik fehlerfrei funktioniert und die Daten Ihrer Benutzer sowie deren Seelenfrieden schützt.

button

Praktizieren Sie API Design-First in Apidog

Entdecken Sie eine einfachere Möglichkeit, APIs zu erstellen und zu nutzen