Ausführlich, aber aus der HTTP 1.1-Methodenspezifikation kopiert unter http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
9.3 GET
Die GET-Methode bedeutet, dass alle Informationen (in Form einer Entität) abgerufen werden, die durch die Request-URI identifiziert werden. Bezieht sich die Request-URI auf einen datenproduzierenden Prozess, werden die produzierten Daten als Entität in der Antwort zurückgegeben und nicht der Quelltext des Prozesses, es sei denn, dieser Text ist die Ausgabe des Prozesses.
Die Semantik der GET-Methode ändert sich in ein "bedingtes GET", wenn die Anforderungsnachricht ein If-Modified-Since-, If-Unmodified-Since-, If-Match-, If-None-Match- oder If-Range-Headerfeld enthält. Eine bedingte GET-Methode verlangt, dass die Entität nur unter den durch das/die bedingte(n) Header-Feld(er) beschriebenen Umständen übertragen wird. Die bedingte GET-Methode soll die unnötige Netzauslastung verringern, indem sie es ermöglicht, zwischengespeicherte Entitäten zu aktualisieren, ohne dass mehrere Anfragen erforderlich sind oder Daten übertragen werden müssen, die sich bereits im Besitz des Clients befinden.
Die Semantik der GET-Methode ändert sich zu einem "partiellen GET", wenn die Anforderungsnachricht ein Range-Header-Feld enthält. Ein teilweiser GET verlangt, dass nur ein Teil der Entität übertragen wird, wie in Abschnitt 14.35 beschrieben. Die partielle GET-Methode soll die unnötige Netzauslastung verringern, indem sie es ermöglicht, teilweise abgerufene Entitäten zu vervollständigen, ohne bereits im Besitz des Clients befindliche Daten zu übertragen.
Die Antwort auf eine GET-Anfrage ist nur dann zwischenspeicherfähig, wenn sie die in Abschnitt 13 beschriebenen Anforderungen für HTTP-Caching erfüllt.
Siehe Abschnitt 15.1.3 zu Sicherheitsüberlegungen bei der Verwendung für Formulare.
9.5 POST
Die POST-Methode wird verwendet, um anzufordern, dass der Ursprungsserver die in der Anfrage enthaltene Entität als neuen Unterordner der durch die Request-URI in der Request-Line identifizierten Ressource akzeptiert. POST wurde entwickelt, um eine einheitliche Methode zu ermöglichen, die die folgenden Funktionen abdeckt:
- Annotation of existing resources;
- Posting a message to a bulletin board, newsgroup, mailing list,
or similar group of articles;
- Providing a block of data, such as the result of submitting a
form, to a data-handling process;
- Extending a database through an append operation.
Die tatsächliche Funktion, die von der POST-Methode ausgeführt wird, wird vom Server bestimmt und ist in der Regel von der Request-URI abhängig. Die gepostete Entität ist dieser URI untergeordnet, so wie eine Datei einem Verzeichnis untergeordnet ist, das sie enthält, ein News-Artikel einer Newsgruppe untergeordnet ist, in die er gepostet wird, oder ein Datensatz einer Datenbank untergeordnet ist.
Die von der POST-Methode durchgeführte Aktion führt möglicherweise nicht zu einer Ressource, die durch einen URI identifiziert werden kann. In diesem Fall ist entweder 200 (OK) oder 204 (kein Inhalt) der geeignete Antwortstatus, je nachdem, ob die Antwort eine Entität enthält, die das Ergebnis beschreibt oder nicht.
Wenn eine Ressource auf dem Ursprungsserver erstellt wurde, SOLLTE die Antwort 201 (Created) lauten und eine Entität enthalten, die den Status der Anfrage beschreibt und auf die neue Ressource verweist, sowie einen Location-Header (siehe Abschnitt 14.30).
Antworten auf diese Methode können nicht zwischengespeichert werden, es sei denn, die Antwort enthält entsprechende Cache-Control- oder Expires-Header-Felder. Die Antwort 303 (siehe Sonstiges) kann jedoch verwendet werden, um den Benutzeragenten anzuweisen, eine cachefähige Ressource abzurufen.
POST-Anfragen MÜSSEN die in Abschnitt 8.2 genannten Anforderungen an die Nachrichtenübermittlung erfüllen.
Siehe Abschnitt 15.1.3 für Sicherheitsüberlegungen.
9.6 PUT
Die PUT-Methode verlangt, dass die eingeschlossene Entität unter der angegebenen Request-URI gespeichert wird. Verweist die Request-URI auf eine bereits existierende Ressource, SOLLTE die eingeschlossene Entität als eine modifizierte Version der auf dem Ursprungsserver befindlichen Entität betrachtet werden. Wenn die Request-URI nicht auf eine bestehende Ressource verweist und diese URI vom anfragenden User-Agent als neue Ressource definiert werden kann, kann der Ursprungsserver die Ressource mit dieser URI erstellen. Wenn eine neue Ressource erstellt wird, MUSS der Ursprungsserver den User-Agent über die 201 (Created) Antwort informieren. Wird eine bestehende Ressource geändert, SOLLTE entweder der Antwortcode 200 (OK) oder 204 (No Content) gesendet werden, um den erfolgreichen Abschluss der Anfrage anzuzeigen. Konnte die Ressource mit der Request-URI nicht erstellt oder geändert werden, SOLLTE eine entsprechende Fehlerantwort gegeben werden, die die Art des Problems widerspiegelt. Der Empfänger der Entität DARF KEINE Content-*-Header (z. B. Content-Range) ignorieren, die er nicht versteht oder nicht implementiert, und MUSS in solchen Fällen eine Antwort 501 (Not Implemented) zurückgeben.
Wenn die Anfrage einen Cache durchläuft und die Request-URI eine oder mehrere aktuell gecachte Entitäten identifiziert, SOLLTEN diese Einträge als veraltet behandelt werden. Antworten auf diese Methode sind nicht cachefähig.
Der grundlegende Unterschied zwischen POST- und PUT-Anfragen spiegelt sich in der unterschiedlichen Bedeutung der Request-URI wider. Die URI in einer POST-Anforderung identifiziert die Ressource, die die eingeschlossene Entität verarbeiten wird. Bei dieser Ressource kann es sich um einen datenannehmenden Prozess, ein Gateway zu einem anderen Protokoll oder um eine separate Entität handeln, die Anmerkungen annimmt. Im Gegensatz dazu identifiziert die URI in einer PUT-Anfrage die der Anfrage beigefügte Entität - der User Agent weiß, welche URI gemeint ist, und der Server MUSS NICHT versuchen, die Anfrage auf eine andere Ressource anzuwenden. Wenn der Server wünscht, dass die Anfrage auf einen anderen URI angewendet wird,
MUSS er eine 301-Antwort (Moved Permanently) senden; der User-Agent kann dann selbst entscheiden, ob er die Anfrage weiterleitet oder nicht.
Eine einzelne Ressource KANN durch viele verschiedene URIs identifiziert werden. Zum Beispiel könnte ein Artikel eine URI zur Identifizierung der "aktuellen Version" haben, die von der URI zur Identifizierung jeder einzelnen Version getrennt ist. In diesem Fall kann eine PUT-Anfrage an einen allgemeinen URI dazu führen, dass der Ursprungsserver mehrere andere URIs definiert.
HTTP/1.1 definiert nicht, wie eine PUT-Methode den Zustand eines Ursprungs-Servers beeinflusst.
PUT-Anfragen MÜSSEN die in Abschnitt 8.2 beschriebenen Anforderungen an die Nachrichtenübertragung erfüllen.
Sofern für einen bestimmten Entity-Header nicht anders angegeben, SOLLTEN die Entity-Header in der PUT-Anfrage auf die durch das PUT erstellte oder geänderte Ressource angewendet werden.
9.7 LÖSCHEN
Die DELETE-Methode fordert den Ursprungsserver auf, die durch die Request-URI identifizierte Ressource zu löschen. Diese Methode KANN durch menschliches Eingreifen (oder andere Mittel) auf dem Herkunftsserver außer Kraft gesetzt werden. Der Client kann nicht sicher sein, dass die Operation ausgeführt wurde, selbst wenn der vom Ursprungsserver zurückgegebene Statuscode anzeigt, dass die Aktion erfolgreich abgeschlossen wurde. Der Server SOLLTE jedoch NICHT den Erfolg anzeigen, es sei denn, er beabsichtigt zum Zeitpunkt der Antwort, die Ressource zu löschen oder sie an einen unzugänglichen Ort zu verschieben.
Eine erfolgreiche Antwort SOLLTE 200 (OK) lauten, wenn die Antwort eine Entität enthält, die den Status beschreibt, 202 (Angenommen), wenn die Aktion noch nicht ausgeführt wurde, oder 204 (Kein Inhalt), wenn die Aktion ausgeführt wurde, aber die Antwort keine Entität enthält.
Wenn die Anfrage einen Cache durchläuft und die Request-URI eine oder mehrere aktuell gecachte Entitäten identifiziert, SOLLTEN diese Einträge als veraltet behandelt werden. Antworten auf diese Methode sind nicht cachefähig.
17 Stimmen
@Daniel, danke für die Bearbeitung. "Ich mehr Verben" war ein absichtliches Wortspiel, aber ich lasse es so, es ist jetzt leichter zu lesen :)
1 Stimmen
Übrigens, zur Fehlerbeschreibung. Ich habe es geschafft, die Fehlerbeschreibung in die Kopfzeile der Antwort zu schreiben. Fügen Sie einfach eine Kopfzeile mit dem Namen "Fehlerbeschreibung" hinzu.
0 Stimmen
Dies sieht eher nach Fragen der Anwendungssicherheit aus. Anwendungssicherheit ist nicht das, worum es bei REST geht.
0 Stimmen
@NazarMerza wie sind 1., 2. und 3. die Fragen zur Anwendungssicherheit?