2013-05-29 10 views
29

Ich sehe in letzter Zeit viele Frameworks, die sich entschieden haben, PUT- und DELETE-Anfragen zu "fälschen". Wie Ruby on Rails. Sie scheinen darauf zu warten, dass die Browser aufholen. Warten sie vergebens?Warum unterstützen Browser keine PUT- und DELETE-Anfragen und wann werden sie?

Soll das überhaupt irgendwo implementiert werden?

+1

Welche Aktionen auf Browserebene würden die Semantik 'PUT' und' DELETE' erfordern? Sie können die Aktionen HTTP 'PUT' und' DELETE' bereits programmatisch generieren. Es ist nur, dass ich mir nicht vorstellen kann, wie man diese einem Benutzer in einem Browser aussetzt (was würde es tun? "PUT", wenn Sie eine Datei in Ihren Browser ziehen?) – Gian

+0

Sie werden in HTML5- und Ajax-Anfragen unterstützt. – n1xx1

+0

@ N1xx1 also in html5 konnte ich

? Süss. Ich werde das untersuchen. – pixelearth

Antwort

53

Browser unterstützen PUT und DELETE, aber es ist HTML, das nicht.

Zum Beispiel, ein Browser wird eine PUT Anfrage über Javascript (AJAX) initiieren, aber nicht über HTML <form> Einreichung.

Dies liegt daran, dass HTML 4.01 und die endgültige W3C HTML 5.0-Spezifikation beide sagen, dass die einzigen HTTP-Methoden, die ihre form Elemente zulassen sollten, sind GET und POST.

Es gab viel Diskussion darüber während der Entwicklung von HTML 5, und irgendwann wurden sie HTML 5 hinzugefügt, nur um sie wieder zu entfernen. Der Grund, warum die zusätzlichen Methoden aus der HTML 5-Spezifikation entfernt wurden, liegt darin, dass HTML-4-Level-Browser sie niemals unterstützen konnten (sie waren zum Zeitpunkt ihrer Erstellung nicht Teil von HTML); und es gibt keine Möglichkeit, dies ohne JavaScript-Shim zu tun; Daher können Sie auch AJAX verwenden.

Webseiten versuchen, Formulare zu verwenden, um mit method="PUT" oder method="DELETE" würde auf die Standard-Methode zurückgreifen, GET für alle gängigen Browser. Dies unterbricht die Versuche der Web-Anwendungen, geeignete Methoden in HTML-Formularen für die beabsichtigte Aktion zu verwenden, und führt schließlich zu einem schlechteren Ergebnis - GET wird verwendet, um Dinge zu löschen! (Hallo Crawler. Oh, hoppla! Da geht meine Datenbank)

Ändern die Standardmethode für HTML <form> Elemente POST helfen würden (IMO sollte der Standard immer POST gewesen, seitdem Moasic * debütierte Formen in 1993), aber Um den Standard zu ändern, würde es mindestens ein Jahrzehnt dauern, bis er durch die installierte Basis fließt. Also in zwei Worten: "weil Erbe". :-(

aktuelle Browser zu unterstützen, werden Autoren zu fälschen haben es mit einer Überschreibung Ich empfehle die weithin verwenden Autoren bekannt a, b_method Argument von <input type=hidden name=_method value=DELETE> in ihrer HTML einschließlich;. Die Form Methode POST wechseln (Da die Anfrage unsicher ist), dann fügen Sie die Erkennung von _method auf der Serverseite hinzu, die dann tun sollte, was notwendig ist, um die Anfrage zu mutieren und weiterzuleiten, als wäre es eine echte DELETE-Anfrage.

Beachten Sie auch, dass seit Web Browser sind die ultimativen HATEOAS Client, sie brauchen eine ne w Status, der für DELETE-Anfragen an sie übertragen wird. Existierende APIs geben oft 204 No Content für solche Anfragen zurück. Sie sollten stattdessen eine Hypermedia-Antwort mit Links zurücksenden, damit der Benutzer seinen Browserstatus fortführen kann.

Siehe auch die Antworten auf diese ähnlichen/identischen Fragen:


* Mosiac, erstellt von Marc A ndreessen, führte auch den zusammengesetzten Fehler des <img src=…> Tags ein - es hätte <image source=…>fallback</image> sein sollen.