HTTPQUERY
Deutsch

100 Continue

Verwendung

Clients, die den Expect-Header senden, wollen vor der Übertragung bestätigt bekommen, dass der Server zum Empfang des Nachrichtenrumpfs bereit ist. Wenn ein Nachrichtenrumpf groß ist, einen vom Server nicht akzeptierten Inhaltstyp verwendet oder dem Benutzer die Berechtigung zum Senden von Dateien fehlt, prüft dieser Ablauf diese Bedingungen, bevor der Rumpf gesendet wird.

Sobald der Statuscode 100 Continue eintrifft, wird der Nachrichtenrumpf gesendet. Gibt der Server stattdessen 417 zurück, fährt der Client nicht fort.

Der Vorteil der Kombination aus Expect-Header und 100-continue besteht darin, Bandbreite zu sparen, wenn der Server wählerisch ist, welche Inhalte er empfängt und verarbeitet.

Der Nachteil ist, dass HTTP-Anfrage-Header und -Rumpf unabhängig voneinander gesendet werden. In manchen Umgebungen werden beide leicht voneinander getrennt, sodass ein Fehler zurückgegeben wird, statt die HTTP-Anfrage zu verarbeiten.

Beispiel

Anfrage

PUT /docs HTTP/1.1
Host: example.com
Content-Type: application/pdf
Content-Length: 99000
Expect: 100-continue

Antwort

HTTP/1.1 100 Continue

Fortsetzung der Anfrage

<PDF file contents are sent as message body>

Endgültige Antwort

HTTP/1.1 200 OK

Der Client plant, eine 99 KB große PDF-Datei zur Verarbeitung an den Server zu senden, kündigt dies in der HTTP-Anfrage an und bittet um eine vorherige Validierung. Der Server antwortet zustimmend, woraufhin der Client den Nachrichtenrumpf sendet. Als endgültige Antwort schließt der Server die HTTP-Sitzung mit einer Erfolgsmeldung ab.

Alternativ antwortet der Server mit einem Fehler:

HTTP/1.1 417 Expectation Failed

In dieser Situation sendet der Client das PDF nicht, und die weitere Kommunikation beginnt mit einer neuen HTTP-Anfrage.

Expect100Continue in Client-Bibliotheken

Viele HTTP-Client-Bibliotheken stellen Expect100Continue als konfigurierbare Eigenschaft bereit. In .NET steuert ServicePointManager.Expect100Continue, ob POST- und PUT-Anfragen automatisch den Header Expect: 100-continue enthalten. Wird diese Eigenschaft deaktiviert, entfällt die vorherige Prüfung und der Rumpf wird sofort gesendet.

Code-Referenzen

.NET

HttpStatusCode.Continue

Rust

http::StatusCode::CONTINUE

Rails

:continue

Go

http.StatusContinue

Symfony

Response::HTTP_CONTINUE

Python3.5+

http.HTTPStatus.CONTINUE

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_CONTINUE

Angular

@angular/common/http/HttpStatusCode.Continue