Sind die PUT, DELETE, HEAD, etc Methoden in den meisten Web-Browsern zur Verfügung?
-
03-07-2019 - |
Frage
Ich habe ein paar Fragen zu sehen hier wie Wie RESTful Services debuggen , die erwähnt:
Leider der gleiche Browser erlaubt mir nicht, HTTP PUT zu testen, DELETE und bis zu einem gewissen Grad auch HTTP POST.
Ich habe auch gehört, dass Browser unterstützt nur GET und POST, von einigen anderen Quellen wie:
- http://www.packetizer.com/ws/rest.html
- http: //www.mail-archive. com/jmeter-user@jakarta.apache.org/msg13518.html
- http://www.xml.com/cs/user/view/ cs_msg / 1098
Allerdings zeigen ein paar schnelle Tests in Firefox, dass Anfragen PUT
und DELETE
Senden funktioniert wie erwartet - die XMLHttpRequest
erfolgreich abgeschlossen wird, und die Anforderung zeigt sich in den Server-Logs mit der richtigen Methode auf. Gibt es einen Aspekt dieses fehlt mir, wie Cross-Browser-Kompatibilität oder nicht-offensichtlichen Einschränkungen?
Lösung
Nein. Die HTML 5-Spezifikation erwähnt:
Die Methode und formmethod Inhaltsattribute Attribute aufgezählt mit den folgenden Suchbegriffen und es heißt:
Das Schlüsselwort erhalten , Abbildung auf den Zustand GET, was anzeigt, die HTTP GET Methode. Die GET-Methode sollte nur verlangen und Abrufen von Daten und sollte keine andere Wirkung haben.
Das Schlüsselwort Post , Abbildung auf den Zustand POST, was auf die HTTP-POST-Methode. Die POST-Methode fordert, dass der Server die übermittelten Formulardaten akzeptieren zu verarbeiten, die gegebenen Ergebnis in einem Element zu einer Datenbank hinzugefügt werden, die Schaffung eines neuen Web Seite Ressource, die Aktualisierung der bestehenden Seite, oder alle der die oben genannte Ergebnisse.
Das Schlüsselwort Dialog , mapping in den Zustand Dialog, das anzeigt, dass Absenden des Formulars soll den Dialog schließen, in dem die Form findet sich, wenn überhaupt, und auch sonst nicht vor.
Der ungültige Wert Standard für diese Attribute ist der GET-Zustand
d. HTML-Formulare unterstützen nur GET und POST als HTTP-Request-Methoden. Eine Abhilfe für dieses ist zu tunneln anderen Methoden durch POST durch ein verborgenes Formularfeld verwendet, die entsprechend durch den Server und die Anforderung versendet gelesen wird.
Doch GET , POST , PUT und Löschen ist unterstützt durch die Implementierungen von XMLHttpRequest (dh AJAX Anrufe) in allen gängigen Web-Browsern (IE, Firefox, Safari, Chrome, Opera).
Andere Tipps
HTML-Formulare Unterstützung GET und POST. (HTML5 an einem Punkt hinzugefügt PUT / DELETE, aber diejenigen, wurden fallen gelassen.)
XMLHttpRequest unterstützt alle Verfahren, einschließlich Huhn, obwohl einige Methodennamen angepasst sind gegen case-insensitiv (Methoden sind case-sensitive pro HTTP) und einige Methodennamen sind durchaus nicht aus Sicherheitsgründen unterstützt (zB CONNECT).
Browser konvergieren langsam auf den Regeln von XMLHttpRequest angegeben, aber wie die anderen Kommentar darauf hingewiesen, gibt es noch einige Unterschiede.
XMLHttpRequest
ist ein Standard-Objekt im JavaScript-Objektmodell.
Laut Wikipedia XMLHttpRequest
zuerst im Internet Explorer 5 als ActiveX-Objekt erschienen , sondern wurde in einen Standard seit gemacht und wird für den Einsatz in JavaScript in der Mozilla-Familie seit 1.0 oder Apple Safari 1.2, Opera 7.60-p1 und IE 7.0.
Die open()
Verfahren auf dem Objekt wird die HTTP-Methode als Argument - und wird als unter jeder gültige HTTP-Methode festgelegt (siehe die Positionsnummer 5 des Link) - einschließlich GET
, POST
, HEAD
, PUT
und DELETE
, als < a href = "https://tools.ietf.org/html/rfc2616#section-5.1.1" rel = "nofollow noreferrer"> angegeben durch RFC 2616 .
Als Randbemerkung IE 7-8 nur erlauben die folgenden HTTP-Methoden: "GET", "POST", "HEAD", "PUT", "LÖSCHEN", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "Kopieren", "LOCK" "UNLOCK" und "Optionen" .
Ich glaube, diese Kommentare speziell auf den Browser beziehen, das heißt, Klicken auf Links und Formulare einreichen, nicht XMLHttpRequest
. XMLHttpRequest
ist nur eine benutzerdefinierte Client, dass Sie schrieb in JavaScript, die den Browser als Runtime verwendet.
UPDATE: Um zu klären, wollte ich nicht (obwohl ich habe schreiben), dass Sie schrieb XMLHttpRequest
; Ich meinte, dass Sie den Code geschrieben, die XMLHttpRequest
verwendet. Der Browser nicht nativ unterstützen XMLHttpRequest
. XMLHttpRequest
kommt aus der JavaScript-Laufzeit, die von einem Browser gehostet werden kann, obwohl es nicht Rhino sein (siehe erforderlich ist ). Das ist, warum die Leute sagen Browsern nicht unterstützt PUT
und DELETE
-denn es ist eigentlich JavaScript, die sie unterstützt.
_method
verstecktes Feld Abhilfe
in Rails Gebrauchte und könnte in jedem Rahmen angepasst werden:
-
einen versteckten
_method
Parameter auf jede Form hinzuzufügen, die nicht GET oder POST:<input type="hidden" name="_method" value="DELETE">
Dies kann automatisch in dem Rahmen durch die HTML Schaffung Hilfsmethode (zum Beispiel Rails
form_tag
) erfolgen
-
fixiert die tatsächliche Form Methode POST (
<form method="post"
) -
Prozesse
_method
auf dem Server und genau das tun, als ob diese Methode anstelle der tatsächlichen POST geschickt worden war
Rationale / Geschichte, warum es nicht möglich ist: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
YES , PUT, DELETE, HEAD etc HTTP-Methoden in allen modernen Browsern zur Verfügung stehen.
XMLHttpRequest Ebene 2 Browser kompatibel sein muss diese Methoden unterstützen. Um zu überprüfen, welche Browser-2-Unterstützung XMLHttpRequest Level I empfehlen CanIUse:
Nur Opera Mini fehlt Unterstützung atm (Juli '15), aber Opera Mini fehlt Unterstützung für alles. :)
Just hinzufügen - Safari 2 und früher definitiv nicht PUT und DELETE unterstützen. Ich habe den Eindruck, 3 tut, aber ich habe es nicht mehr da zu testen. Safari 4 auf jeden Fall tut Unterstützung PUT und DELETE.