wake-up-neo.com

Sind die Methoden PUT, DELETE, HEAD usw. in den meisten Webbrowsern verfügbar?

Ich habe hier ein paar Fragen gesehen, wie Wie man RESTful-Services debuggt , die Folgendes erwähnen:

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, von einigen anderen Quellen wie:

Einige schnelle Tests in Firefox haben jedoch gezeigt, dass das Senden von PUT und DELETE Anforderungen wie erwartet funktioniert. XMLHttpRequest wird erfolgreich ausgeführt und die Anforderung wird in den Serverprotokollen mit angezeigt die richtige Methode. Gibt es einen Aspekt, den ich vermisse, wie die browserübergreifende Kompatibilität oder nicht offensichtliche Einschränkungen?

596
John Millikin

Nein. Die HTML 5-Spezifikation erwähnt:

Die Inhaltsattribute method und formmethod sind Aufzählungsattribute mit den folgenden Schlüsselwörtern und Zuständen:

Das Schlüsselwort get , das dem Status GET zugeordnet ist und die HTTP-GET-Methode angibt. Die GET-Methode sollte nur Daten anfordern und abrufen und sollte keine anderen Auswirkungen haben.

Das Schlüsselwort post , das dem Status POST zugeordnet ist und die Methode HTTP POST angibt. Die Methode POST fordert den Server auf, die zu verarbeitenden Daten des übergebenen Formulars zu akzeptieren. Dies kann dazu führen, dass ein Element zu einer Datenbank hinzugefügt wird, eine neue Webseitenressource erstellt und die vorhandene Seite aktualisiert wird. oder alle genannten Ergebnisse.

Das Schlüsselwortdialogfeld , das dem Statusdialogfeld zugeordnet ist und angibt, dass beim Absenden des Formulars das Dialogfeld geschlossen werden soll, in dem sich das Formular befindet, sofern vorhanden. und sonst nicht einreichen.

Der ungültige Standardwert für diese Attribute ist der GET-Status

Das heißt HTML-Formulare unterstützen nur [~ # ~] das Abrufen von [~ # ~] 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.

[~ # ~] erhält jedoch [~ # ~] , [~ # ~] post [~ # ~] , [~ # ~] setzen [~ # ~] und [~ # ~] delete [~ # ~] are wird von den Implementierungen von XMLHttpRequest (dh AJAX -Aufrufen) insgesamt unterstützt die wichtigsten Webbrowser (IE, Firefox, Safari, Chrome, Opera).

457
Matthew Murdoch

HTML-Formulare unterstützen GET und POST. (HTML5 fügte an einer Stelle PUT/DELETE hinzu, aber diese wurden gelöscht.)

XMLHttpRequest unterstützt alle Methoden, einschließlich CHICKEN. Einige Methodennamen werden jedoch ohne Berücksichtigung der Groß- und Kleinschreibung abgeglichen (bei Methoden wird die Groß- und Kleinschreibung per HTTP berücksichtigt), und einige Methodennamen werden aus Sicherheitsgründen überhaupt nicht unterstützt (z. B. CONNECT).

Browser nähern sich langsam den von XMLHttpRequest festgelegten Regeln an, aber wie der andere Kommentar zeigte, gibt es immer noch einige Unterschiede.

78
Anne

XMLHttpRequest ist ein Standardobjekt im JavaScript-Objektmodell.

Laut Wikipedia erschien XMLHttpRequest erstmals in Internet Explorer 5 als ActiveX-Objekt, wurde jedoch seitdem zu einem Standard und ist seit 1.0 für die Verwendung in JavaScript in der Mozilla-Familie enthalten , Apple Safari 1.2, Opera 7.60-p1 und IE 7.0.

Die open() -Methode für das Objekt verwendet die HTTP-Methode als Argument - und es wird angegeben, dass eine gültige HTTP-Methode verwendet wird (siehe Artikel 5 des Links) - einschließlich GET, POST, HEAD, PUT und DELETE, as angegeben in RFC 2616 .

Als Randnotiz IE 7–8 erlaubt nur die folgenden HTTP-Methoden: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH". , "MKCOL", "COPY", "LOCK", "UNLOCK" und "OPTIONS" .

41
Vihung

_method Problemumgehung für ausgeblendete Felder

Wird in Rails verwendet und kann an jedes Framework angepasst werden:

  • füge einen versteckten _method Parameter zu jedem Formular hinzu, das nicht GET oder POST ist:

    <input type="hidden" name="_method" value="DELETE">
    

    Dies kann in Frameworks mithilfe der HTML-Erstellungshilfemethode automatisch erfolgen (z. B. Rails form_tag).

  • korrigieren Sie die eigentliche Formularmethode zu POST (<form method="post")

  • verarbeitet _method auf dem Server und tut genau so, als ob diese Methode anstelle des eigentlichen POST gesendet worden wäre

Begründung/Vorgeschichte, warum es nicht möglich ist: https: //softwareengineering.stackexchange.com/questions/114156/ warum-die-nicht-eingegeben-und-gelöscht-werden-in-html-formulare

Ich glaube, diese Kommentare beziehen sich speziell auf die Browser, d. H. Auf das Klicken auf Links und das Senden von Formularen, nicht auf XMLHttpRequest. XMLHttpRequest ist nur ein benutzerdefinierter Client, den Sie in JavaScript geschrieben haben und der den Browser als Laufzeit verwendet.

UPDATE: Um zu verdeutlichen, habe ich nicht gemeint (obwohl ich geschrieben habe), dass Sie XMLHttpRequest geschrieben haben; Ich meinte, dass Sie den Code geschrieben haben, der XMLHttpRequest verwendet. Die Browser unterstützen XMLHttpRequest nicht von Haus aus. 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 PUT und DELETE nicht unterstützen - weil sie tatsächlich von JavaScript unterstützt werden.

15
Hank Gay

[~ # ~] yes [~ # ~] , PUT, DELETE, HEAD etc HTTP-Methoden sind in verfügbar alle modernen Browser.

Um konform zu sein mit XMLHttpRequest Level 2 unterstützen die Browser müssen diese Methoden. Um zu überprüfen, welche Browser XMLHttpRequest Level 2 unterstützen, empfehle ich CanIUse:

http://caniuse.com/#feat=xhr2

Nur für Opera Mini fehlt die Unterstützung atm (Juli '15), aber für Opera Mini fehlt die Unterstützung für alles :)

9
Stijn de Witt

Nur zum Hinzufügen - Safari 2 und frühere Versionen haben PUT und DELETE definitiv nicht unterstützt. Ich habe den Eindruck 3 habe, aber ich habe es nicht mehr um zu testen. Safari 4 unterstützt definitiv PUT und DELETE.

7
jharlap