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 Anfragetextes wird durch den Content-Type-Header angegeben.

Der Unterschied zwischen PUT und POST ist, dass PUT idempotent ist: Ein einmaliger Aufruf unterscheidet sich nicht von mehreren aufeinanderfolgenden Aufrufen (es gibt keine Seiteneffekte). Aufeinanderfolgende identische POST-Anfragen können zusätzliche Effekte haben, wie etwa dass die gleiche Bestellung mehrmals erstellt wird.

HTML-Formulare senden typischerweise Daten unter Verwendung von POST, was normalerweise zu einer Änderung auf dem Server führt. Für HTML-Formulare wird das Format/die Kodierung des Anfragetextes durch das enctype-Attribut des <form>-Elements oder des formenctype-Attributs 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-Tupeln kodiert, die durch ein kaufmännisches Und-Zeichen (&) getrennt sind, mit einem Gleichheitszeichen (=) zwischen dem Schlüssel und dem Wert (z. B. first-name=Frida&last-name=Kahlo). Nicht-alphanumerische Zeichen in sowohl Schlüsseln als auch Werten werden prozentkodiert: Dies ist der Grund, warum dieser Typ nicht geeignet ist, um mit Binärdaten verwendet zu werden, und multipart/form-data hierfür genutzt werden sollte.
  • multipart/form-data: Jeder Wert wird als Datenblock („Body-Part“) gesendet, mit einem von der Benutzer-Agent definierten Trennzeichen (zum Beispiel boundary="delimiter12345") zur Trennung jedes Teils. Die Schlüssel werden im Content-Disposition-Header eines jeden Teils oder Datenblocks beschrieben.
  • text/plain

Wenn die POST-Anfrage nach einem fetch()-Aufruf gesendet wird oder aus einem anderen Grund als einem HTML-Formular, kann der Anfragetext jeglicher Typ sein. Wie in der HTTP 1.1-Spezifikation beschrieben, ist POST so konzipiert, dass eine einheitliche Methode für die folgenden Funktionen bereitgestellt wird:

  • Annotation bestehender Ressourcen
  • Posten einer Nachricht auf einem Schwarzen Brett, Newsgroup, Mailingliste oder ähnlicher Artikelgruppe
  • Hinzufügen eines neuen Benutzers über ein Anmeldeformular
  • Bereitstellen eines Datenblocks, wie das Ergebnis einer Formularübermittlung, an einen Datenverarbeitungsprozess
  • Erweiterung einer Datenbank durch eine Anhängeoperation
Anfrage hat einen Textkörper Ja
Erfolgreiche Antwort hat einen Textkö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) in Anfragen an einen Ursprungsserver und eine absolute URL in Anfragen an Proxies (z. B. http://www.example.com/path/to/file.html).

<query> Optional

Eine optionale Abfragekomponente, die durch ein Fragezeichen ? eingeleitet wird. Häufig verwendet, um Identifikationsinformationen in Form von key=value-Paaren zu übermitteln.

Beispiele

URL-kodierte Formularübermittlung

Ein Formular, das die application/x-www-form-urlencoded-Kodierung verwendet (die Standardeinstellung), sendet eine Anfrage, bei der der Textkö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-Formularübermittlung

Die multipart/form-data-Kodierung wird verwendet, wenn ein Formular Dateien oder eine große Menge an Daten enthält. Dieser Anfragetext trennt jeden Teil des Formulars durch eine Grenzzeichenfolge. 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 gegebenenfalls filename spezifiziert wird.

Spezifikationen

Specification
HTTP Semantics
# POST

Browser-Kompatibilität

Siehe auch