POST

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Die POST HTTP-Methode sendet Daten an den Server. Der Typ des Anfragekörpers wird durch den Content-Type Header angezeigt.

Der Unterschied zwischen PUT und POST besteht darin, dass PUT idempotent ist: Ein einmaliger Aufruf unterscheidet sich nicht von mehrmaligen aufeinanderfolgenden Aufrufen (es gibt keine Nebeneffekte). Aufeinanderfolgende identische POST-Anfragen können zusätzliche Effekte haben, wie z. B. das mehrmalige Erstellen derselben Bestellung.

HTML-Formulare senden Daten typischerweise mit POST und dies führt normalerweise zu einer Änderung auf dem Server. Für HTML-Formulare wird das Format/die Kodierung des Inhalts des Körpers durch das enctype Attribut des <form> Elements oder das formenctype Attribut der <input> oder <button> Elemente bestimmt. Die Kodierung kann eine der folgenden sein:

  • application/x-www-form-urlencoded: Die Schlüssel und Werte werden in Schlüssel-Wert-Tupel enkodiert, die durch ein Und-Zeichen (&) getrennt sind, mit einem Gleichheitszeichen (=) zwischen Schlüssel und Wert (z.B. first-name=Frida&last-name=Kahlo). Nicht alphanumerische Zeichen in sowohl Schlüsseln als auch Werten sind percent-kodiert: dies ist der Grund, warum dieser Typ nicht geeignet ist für die Verwendung mit binären Daten, und Sie stattdessen multipart/form-data für diesen Zweck verwenden sollten.
  • multipart/form-data: Jeder Wert wird als ein Datenblock ("body part") gesendet, mit einem durch den User-Agent definierten Trennzeichen (zum Beispiel boundary="delimiter12345") das jeden Teil trennt. Die Schlüssel werden im Content-Disposition Header jedes Teils oder Blocks von Daten beschrieben.
  • text/plain

Wenn die POST-Anfrage nach einem fetch() Aufruf gesendet wird, oder aus einem anderen Grund als einem HTML-Formular, kann der Körper beliebiger Typ sein. Wie im HTTP 1.1 Standard beschrieben, ist POST so konzipiert, dass es eine einheitliche Methode bietet, um die folgenden Funktionen abzudecken:

  • Annotation vorhandener Ressourcen
  • Posten einer Nachricht auf einem Schwarzen Brett, in einer Newsgroup, Mailingliste oder ähnlichen Gruppen von Artikeln
  • Hinzufügen eines neuen Benutzers über ein Anmeldeformular
  • Bereitstellung eines Datenblocks, wie das Ergebnis des Sendens eines Formulars, zu einem Datenverarbeitungsprozess
  • Erweiterung einer Datenbank durch einen Anhangsvorgang
Anfrage hat einen Körper Ja
Erfolgreiche Antwort hat einen Körper Ja
Sicher Nein
Idempotent Nein
Cacheable Nur wenn Aktualitätsinformationen enthalten sind
Erlaubt in HTML-Formularen Ja

Syntax

http
POST <request-target>["?"<query>] HTTP/1.1
<request-target>

Identifiziert die Zielressource der Anfrage, wenn sie mit den im Host Header bereitgestellten Informationen kombiniert wird. Dies ist ein absoluter Pfad (z.B. /path/to/file.html) bei Anfragen an einen Ursprungsserver und eine absolute URL bei Anfragen an Proxies (z.B. http://www.example.com/path/to/file.html).

<query> Optional

Eine optionale Abfragekomponente, die durch ein Fragezeichen ? eingeleitet wird. Oft wird sie verwendet, um identifizierende Informationen in der Form von key=value Paaren zu übermitteln.

Beispiele

URL-encoded Formulareinreichung

Ein Formular mit application/x-www-form-urlencoded Inhaltskodierung (Standard) sendet eine Anfrage, bei der der Körper die Formulardaten in key=value Paaren enthält, wobei jedes Paar durch ein & Symbol getrennt ist, wie unten gezeigt:

http
POST /test HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2

Multipart Formulareinreichung

Die multipart/form-data Kodierung wird verwendet, wenn ein Formular Dateien oder umfangreiche Daten enthält. Diese Anfragekörper trennt jeden Teil des Formulars mit einer Trennzeichenzeichenfolge. Ein Beispiel für eine Anfrage in diesem Format:

http
POST /test HTTP/1.1
Host: example.com
Content-Type: multipart/form-data;boundary="delimiter12345"

--delimiter12345
Content-Disposition: form-data; name="field1"

value1
--delimiter12345
Content-Disposition: form-data; name="field2"; filename="example.txt"

value2
--delimiter12345--

Der Content-Disposition Header gibt an, wie die Formulardaten verarbeitet werden sollen, indem das Feld name und filename spezifiziert wird, falls zutreffend.

Spezifikationen

Specification
HTTP Semantics
# POST

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch