HTML4 / XHTML1 erlaubt nur GET und POST in Formularen, jetzt scheint HTML5 dasselbe zu tun. Es gibt einen Vorschlag, diese beiden hinzuzufügen, aber es scheint nicht an Boden zu gewinnen. Was waren die technischen oder politischen Gründe, um PUT und DELETE nicht in den HTML5-Spezifikationsentwurf aufzunehmen?
265
<form>
Methoden definiert.Antworten:
Das ist eine faszinierende Frage. Die anderen Antworten hier sind alle spekulativ und in einigen Fällen völlig falsch. Anstatt meine Meinung hier zu schreiben, habe ich ein paar Nachforschungen angestellt und Originalquellen gefunden, die erläutern, warum Löschen und Einfügen nicht Teil des HTML5-Formularstandards sind.
Wie sich herausstellt, sind diese Methoden wurden in enthalten mehrere, frühe HTML5 Entwürfe (!), Wurden aber später in den entfernten folgenden Entwürfen . Mozilla hatte dies auch in einer Firefox-Beta implementiert .
Was war der Grund, diese Methoden aus dem Entwurf zu entfernen? Das W3C hat dieses Thema im Fehlerbericht 10671 diskutiert . Mike Amundsen sprach sich für diese Unterstützung aus:
Es lohnt sich, seinen gesamten Beitrag zu lesen.
Tom Wardrop macht auch einen interessanten Punkt:
Der Fehler wurde schließlich von Ian Hickson als Won't Fix geschlossen.
Dies ist jedoch noch nicht das Ende der Geschichte! Das Problem wurde im W3C-Bug-Tracker geschlossen und zum HTML Working Group-Issue-Tracker eskaliert :
https://www.w3.org/html/wg/tracker/issues/195
Derzeit scheint der Hauptgrund, warum diese Methoden nicht unterstützt werden, darin zu liegen, dass sich niemand die Zeit genommen hat, eine umfassende Spezifikation dafür zu schreiben.
quelle
GET und POST haben eine klare inhaltsneutrale Begründung. GET besteht darin, den Inhalt einer URL so abzurufen, dass er wiederholt und möglicherweise zwischengespeichert werden kann. POST ist, etwas auf eine Weise zu tun, die nicht sicher ist, um es zu wiederholen, spekulativ auszuführen oder zwischenzuspeichern.
Es gab keine ähnlichen Gründe für PUT oder DELETE. Sie sind beide vollständig durch POST abgedeckt. Das Erstellen oder Zerstören einer Ressource sind Vorgänge, deren Wiederholung und spekulative Ausführung nicht sicher sind und die nicht zwischengespeichert werden sollten. Für sie ist keine zusätzliche spezielle Semantik erforderlich.
Grundsätzlich gibt es also keinen Nutzen.
quelle
POST
ist nicht idempotent. Wenn Sie in Ihrem Browser auf "Zurück" klicken, wird eine hässliche Seite angezeigt, die besagt, dass das Formular erneut gesendet werden muss. Allerdings war es ein gewesenPUT
, könnte es sicher die erneutPUT
Anforderung angezeigt werden, was Seite sollten Sie erhalten. Vorausgesetzt, man bringt die API nicht durch das Erstellen einer Art durcheinanderDELETE /resource/latest
.Dies wurde im Jahr 2010 gemeldet, da Bug 10671 die Unterstützung von PUT und DELETE als Formularmethoden in Betracht zieht .
Es gab ein mäßiges Ausmaß an Pushback für dieses "Feature" und ein gewisses Maß an Überheblichkeit, aber schließlich eskalierte dies als zwei Probleme im Bug-Tracker der Arbeitsgruppen:
Das Problem ISSUE-196 führte zu einer übereinstimmenden Entscheidung, die Spezifikation nicht zu ändern, da die HTML-Spezifikation derzeit nicht die Behandlung von Antworten auf POST-Anforderungen einschränkt. Ich glaube, dieses spezielle Problem wurde beim Versuch aufgeworfen, häufig verwendete POST-Umleitungsmuster abzugleichen und wie ReSTful-Server häufig 2xx-Antworten mit Kurznachrichten versehen, anstatt etwas Nützliches, das in einem Browser wiedergegeben werden kann.
Die Ausgabe ISSUE-195 wurde den Lehrstühlen vorgestellt. Cameron Jones hat am 18. Januar 2012 freiwillig einen Änderungsvorschlag verfasst, der am 29. Mai 2014 als erster Arbeitsentwurf eingereicht wurde . Der Entwurf wird den W3C-Empfehlungsprozess durchlaufen .
Mit etwas Glück wird dies bald zu einer W3C-Empfehlung, die von Browserverkäufern implementiert wird. Dies wäre ein großer Fortschritt beim Entfernen der Blocker, um einheitliche, semantische und browserfreundliche ReSTful-Dienste zu erstellen. Ich stelle mir vor, dass dies eine interessante Entwicklung der Servicemuster auslösen wird. Es gibt einen guten Vortrag von Jon Moore - Hypermedia-APIs, die es wert sind, gesehen zu werden. Dies hat mein Interesse geweckt, ist aber bei der ersten Hürde (dieser) umgefallen.
quelle
Nach meinem Verständnis wissen Browser nicht, was sie tun sollen, wenn sie ein PUT oder ein DELETE senden. Ein POST leitet normalerweise auf eine entsprechende Seite um, PUT und DELETE normalerweise nicht. Dies macht sie für den Aufruf über Ajax oder ein natives Programm geeignet, jedoch nicht über ein Webbrowser-Formular.
Ich kann es momentan nicht verhindern, aber ich erinnere mich, dass ich eine der HTML5-Mailinglisten gelesen habe, als sie darüber diskutierten.
quelle
Geschichte
Ich denke, es lohnt sich, das erste Auftreten von HTML-Formularen im RFC1866 (Abschnitt 8.1) zu erwähnen . Hier ist das Methodenattribut wie folgt definiert:
Weitere Erläuterungen finden Sie in Abschnitt 8.2.2 - GET und Abschnitt 8.2.3 - POST
Beachten Sie, dass HTML 2.0 (Nov. 1995) vor HTTP 1.0 (Mai 1996) angegeben wurde. Alle verwendeten HTTP also nur mit GET (ab HTTP 0.9) oder mit der Erweiterung POST. PUT und DELETE werden jedoch nur von wenigen Webservern unterstützt (wie im HTTP 1.0-Anhang angegeben ).
Gedanken
Wenn Sie darüber nachdenken, wie sich Berners-Lees Entwicklung des Semantic Web hätte entwickeln können, scheint es klar zu sein, dass es von tatsächlichen Problemen zu einem allgemeinen Konzept übergegangen ist. Zuerst wollte er Dokumente teilen. Deshalb brauchte er Markup. Dann wollte er Datenbanken nach Inhalten abfragen, also brauchte er Formulare. Dann wollte er neue Daten in die Datenbank stellen. Also verwendete er Formulare mit GET und POST. Danach hat er möglicherweise erkannt, dass Sie jede CRUD-Operation für Daten von einem entfernten Standort ausführen können. Daher wurde HTTP erweitert, jedoch nie HTML, da es zu spät war (nur wenige Server unterstützten die neuen CRUD-Operationen).
quelle
Nur eine wilde Vermutung, aber wahrscheinlich, weil HTTP im besten Fall nicht besonders gut für die Zugriffskontrolle ist, und das Letzte, was jeder braucht, sind noch mehr Möglichkeiten für böswillige URLs, eine schlecht gesicherte Website und / oder Anwendung zu kompromittieren.
HTTP ist kein wirklich gutes Protokoll für Dateiübertragungen außer dem Herunterladen vom Server zum Client. Verwenden Sie FTP - oder noch besser SFTP.
quelle
curl --request PUT http://A.B.c/index
Die Frage ist, warum Sie über HTML auf diese Befehle zugreifen können.Get und Post sind Formate zum Übertragen der Daten der Anforderung.
Ich nehme an, Sie fragen nach der Übermittlung von Formularen an einen RESTFUL-Dienst. Es ist jedoch nicht sinnvoll, den http-Anforderungsstandard zu ändern, um Annahmen zum Zweck der http-Anforderung zu machen. Informationen über den Zweck, den die Anforderung erfüllt, werden am besten in den Eingabefeldern verarbeitet.
Wenn der Server eine Adresse hat und diese abruft und veröffentlicht, kann er die Anforderung und ihre Eingabewerte korrekt interpretieren. Von dort aus können Sie mit den Eingabewerten offene Anforderungen an den Server senden und tun, was immer Sie möchten. Zum Beispiel können Sie ein Feld haben, dessen Werte "put" und "delete" sind
quelle