Ich habe hier ein paar Fragen gesehen, wie man RESTful-Services debuggt , in denen Folgendes erwähnt wird:
Leider kann ich mit demselben Browser nicht HTTP PUT, DELETE und bis zu einem gewissen Grad sogar HTTP POST testen.
Ich habe auch gehört, dass Browser nur GET und POST unterstützen, aus einigen anderen Quellen wie:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/[email protected]/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
Einige schnelle Tests in Firefox zeigen jedoch, dass das Senden PUT
und DELETE
Anfordern wie erwartet funktioniert - der XMLHttpRequest
Vorgang wird erfolgreich abgeschlossen, und die Anforderung wird mit der richtigen Methode in den Serverprotokollen angezeigt. Gibt es einen Aspekt, den ich vermisse, wie z. B. browserübergreifende Kompatibilität oder nicht offensichtliche Einschränkungen?
http
cross-browser
browser
ajax
John Millikin
quelle
quelle
Antworten:
Nein. In der HTML 5-Spezifikation wird Folgendes erwähnt:
Dh HTML-Formulare unterstützen nur GET und POST als HTTP-Anforderungsmethoden. Eine Problemumgehung besteht darin, andere Methoden durch POST zu tunneln, indem ein ausgeblendetes Formularfeld verwendet wird, das vom Server gelesen und die Anforderung entsprechend gesendet wird.
Allerdings GET , POST , PUT und DELETE werden von den Implementierungen von XMLHttpRequest (dh AJAX Anrufe) in allen gängigen Web - Browsern (IE, Firefox, Safari, Chrome, Opera) unterstützt.
quelle
HTML-Formulare unterstützen GET und POST. (HTML5 hat an einer Stelle PUT / DELETE hinzugefügt, aber diese wurden gelöscht.)
XMLHttpRequest unterstützt jede Methode, einschließlich CHICKEN, obwohl einige Methodennamen ohne Berücksichtigung der Groß- und Kleinschreibung abgeglichen werden (Methoden unterscheiden per HTTP zwischen Groß- und Kleinschreibung) und einige Methodennamen aus Sicherheitsgründen überhaupt nicht unterstützt werden (z. B. CONNECT).
Browser konvergieren langsam an den von XMLHttpRequest angegebenen Regeln, aber wie der andere Kommentar hervorhob, gibt es immer noch einige Unterschiede.
quelle
XMLHttpRequest
ist ein Standardobjekt im JavaScript-Objektmodell.Laut Wikipedia wurde es
XMLHttpRequest
erstmals in Internet Explorer 5 als ActiveX-Objekt angezeigt, wurde jedoch inzwischen zu einem Standard gemacht und ist seit 1.0, Apple Safari 1.2, Opera 7.60-p1 und IE 7.0 für die Verwendung in JavaScript in der Mozilla-Familie enthalten .Das
open()
Verfahren auf dem Objekt wird die HTTP - Methode als Argument - und wird als unter jeder gültigen HTTP - Methode (siehe die Positionsnummer 5 des Link) angegeben - einschließlichGET
,POST
,HEAD
,PUT
undDELETE
, wie durch RFC 2616 spezifiziert .Als Randnotiz erlaubt IE 7–8 nur die folgenden HTTP-Methoden: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL" , "COPY", "LOCK", "UNLOCK" und "OPTIONS" .
quelle
_method
Problemumgehung für versteckte FelderWird in Rails verwendet und kann an jedes Framework angepasst werden:
Fügen Sie
_method
jedem Formular, das nicht GET oder POST ist , einen versteckten Parameter hinzu:Dies kann in Frameworks automatisch über die Hilfsmethode zur HTML-Erstellung erfolgen (z. B. Rails
form_tag
).Korrigieren Sie die eigentliche Formularmethode auf POST (
<form method="post"
)Prozesse
_method
auf dem Server und tun genau so, als ob diese Methode anstelle des eigentlichen POST gesendet worden wäreBegründung / Verlauf, warum dies nicht möglich ist: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
quelle
Ich glaube, diese Kommentare beziehen sich speziell auf die Browser, dh auf das Klicken auf Links und das Senden von Formularen, nicht
XMLHttpRequest
.XMLHttpRequest
ist nur ein benutzerdefinierter Client, den Sie in JavaScript geschrieben haben und der den Browser als Laufzeit verwendet.UPDATE: Um das zu verdeutlichen, habe ich nicht gemeint (obwohl ich geschrieben habe), dass Sie geschrieben haben
XMLHttpRequest
; Ich meinte, dass Sie den Code geschrieben haben, der verwendetXMLHttpRequest
. Die Browser unterstützen nicht nativXMLHttpRequest
.XMLHttpRequest
stammt aus der JavaScript-Laufzeit, die möglicherweise von einem Browser gehostet wird, obwohl dies nicht erforderlich ist (siehe Rhino ). Aus diesem Grund sagen die Leute, dass Browser dies nicht unterstützenPUT
und -DELETE
weil es tatsächlich JavaScript ist, das sie unterstützt.quelle
it's actually JavaScript that is supporting them
. Nicht wirklich wahr.XMLHttpRequest
ist ein 'Host-Objekt', was bedeutet, dass es ein Objekt ist, das Funktionen vom Host für Javascript-Code verfügbar macht. Es ist kein Teil von JS selbst.JA , PUT, LÖSCHEN, KOPF usw. HTTP-Methoden sind in allen modernen Browsern verfügbar.
Um mit XMLHttpRequest Level 2 kompatibel zu sein, müssen Browser diese Methoden unterstützen. Um zu überprüfen, welche Browser XMLHttpRequest Level 2 unterstützen, empfehle ich CanIUse:
http://caniuse.com/#feat=xhr2
Nur Opera Mini fehlt die Unterstützung atm (juli '15), aber Opera Mini fehlt die Unterstützung für alles. :) :)
quelle
Nur um hinzuzufügen - Safari 2 und früher haben PUT und DELETE definitiv nicht unterstützt. Ich habe den Eindruck, dass 3 es getan hat, aber ich habe es nicht mehr zum Testen. Safari 4 unterstützt definitiv PUT und DELETE.
quelle