Warum unterstützen die modernen Browser die PUT- und DELETE-Formularmethoden nicht?

Lesezeit: 4 Minuten

Ich habe gerade die Erstellung einer RESTful-API für eine meiner neuesten Apps abgeschlossen. Ich habe auch eine einfache Admin-Schnittstellen-Gerüstklasse erstellt, die Ressourcen aufzählt und einfache Formulare und Tabellen zum Bearbeiten, Erstellen, Löschen usw. erstellt.

Zum Aktualisieren und Löschen von Ressourcen gibt die Klasse ein Formular mit den Methoden PUT und DELETE aus, ziemlich einfach:

<form action="/posts/xxxxxxx" method="DELETE">
<input type="submit" value="Delete" />
</form>

und

<form action="/posts/xxxxxxx" method="PUT">
<input type="text" name="username" value="nikcub" />
<input type="text" name="fullname" value="Nik Cubrilovic" />
<input type="text" name="email" value="[email protected]" />
<input type="submit" value="Update" />
</form>

Sehr einfach. Wenn Javascript erkannt wird, fängt es das Formular ab und verwendet eine XMLHTTPRequest, um es zurückzusenden. Das Javascript unterstützt die anderen HTTP-Methoden, aber warum unterstützen moderne Browser die PUT- und DELETE-Methoden nicht? Am Ende sendet es ein GET.

Ich würde es vorziehen, dass, wenn die App elegant auf Standard-HTML zurückgreift, dieselben Methoden verwendet werden, anstatt versteckte Felder und die Logik dafür in der Klasse verwenden zu müssen, oder schlimmer noch, die Methode in den URI einzufügen und GET funktionieren zu lassen .

Ich kann mir keine Gründe vorstellen, warum Browser die anderen HTTP-Methoden nicht unterstützen würden, da Entwickler sowieso nur daran arbeiten, indem sie GET hacken oder POST verwenden.

Ich suchte nach einer Antwort und konnte sie als Teil von finden die XHTML 2.0 Spezifikation. Es gibt keine Erwähnung davon in der HTML5-Spezifikation.

Gibt es einen Grund dafür, dass es in den „HTML5-kompatiblen“ Browsern nicht unterstützt wird? Wo kann ich eine Anfrage stellen, um diese Sicherung zu öffnen und in Browsern zu implementieren?

  • Bist du dir da sicher @JoostBaaij Ich habe es nicht selbst ausprobiert, aber MDN erwähnt es nicht developer.mozilla.org/en-US/docs/Web/HTML/Element/form

    – Georg Mauer

    22. Oktober 2013 um 16:00 Uhr

  • @JoostBaaij Gerade noch einmal überprüft. Senden Sie dieses Formular ab jsbin.com/IWoWiRi/1 dann überprüfen Sie die Anfrage hier requestb.in/ol62w4ol?inspect in Chrome30, FF24, IE10 method="PUT" alles zeigt sich als GET also tut mir leid, aber du liegst falsch.

    – Georg Mauer

    22. Oktober 2013 um 16:08 Uhr


  • Wenn dies nicht der Fall ist, können Sie immer noch eine Telnet-Verbindung auf Port 80 öffnen und die Befehle mit einem clientseitigen Skript starten.

    – Benutzer2284570

    22. Oktober 2013 um 20:04 Uhr

  • @ user2284570 was meinst du? Die Frage betrifft die Tatsache, dass <form> Elemente werden nicht unterstützt method=PUT was hat telnet damit zu tun?

    – Georg Mauer

    22. Oktober 2013 um 20:42 Uhr

  • Duplikat von programers.stackexchange.com/q/114156

    – BalusC

    25. Oktober 2013 um 17:50 Uhr

Einige Web-Frameworks (zB Ruby on Rails) umgehen dies, indem sie ein Hidden einschließen _method Parameter im Formular mit dem Wert der “eigentlichen” Methode, zB:

<form action="/posts/xxxxx" method="POST">
    <input type="hidden" name="_method" value="DELETE">
    <input type="submit" value="delete">
</form>

Das Framework schreibt dann die Anforderung auf der Serverseite vor der Verarbeitung neu, um den Wert von zu verwenden _method -Parameter als HTTP-Methode.

Weiß nicht ob dir das weiterhilft.

  • Danke .. guides.rubyonrails.org/…

    – Lalit Kumar Maurya

    30. April 2013 um 4:38 Uhr

  • Laravel(php) macht das auch.

    – Praveen

    23. November 2015 um 5:58 Uhr

  • Sie können das auch in nodejs tun, indem Sie das npm-Paket ‘method-override’ verwenden github.com/expressjs/method-override

    – jayasurya_j

    22. April 2018 um 17:05 Uhr

Benutzer-Avatar
Akshit Zaveri

Eigentlich habe ich sehr wenig recherchiert und diese Antwort in einem anderen Stackexchange-Forum gefunden.

Ich weiß, es ist keine gute Antwort, einen Link zu posten, aber ich kenne die genaue Antwort nicht. Nur so können Sie Ihren Zweifel ausräumen.

https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

  • Technisch wurde dies bereits in den Kommentaren vermerkt, aber ja. Ich denke, dies kann als Antwort gelten.

    – Georg Mauer

    29. Oktober 2013 um 14:52 Uhr

HTML 4.01 unterstützt nur post und get, siehe http://www.w3.org/TR/html4/interact/forms.html#h-17.3 Bei anderen HTML-Spezifikationen bin ich mir nicht sicher.

  • Ja, ich weiß das, ich frage mich, warum REST mit der heutigen Popularität nicht in “HTML5-Browsern” implementiert wird.

    – nikcub

    4. März 2011 um 6:33 Uhr

  • Die XHTML 2-Spezifikation (genauer gesagt XForms 1.1) enthält PUT- und DELETE-Methoden. Sehen w3.org/TR/xforms11/#submit-put

    – Harri

    4. März 2011 um 7:28 Uhr

  • HTML5 in seinem aktuellen Zustand enthält diese Methoden nicht, dev.w3.org/html5/spec/Overview.html#attr-fs-method

    – Harri

    4. März 2011 um 7:29 Uhr

1180350cookie-checkWarum unterstützen die modernen Browser die PUT- und DELETE-Formularmethoden nicht?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy