635 Stimmen

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

Ich habe hier ein paar Fragen gesehen, wie zum Beispiel Wie debuggt man RESTful-Services, in denen erwähnt wird:

Leider erlaubt mir derselbe Browser nicht, HTTP PUT, DELETE zu testen, und sogar HTTP POST nur eingeschränkt.

Ich habe auch gehört, dass Browser nur GET und POST unterstützen, von anderen Quellen wie:

Ein paar schnelle Tests in Firefox zeigen jedoch, dass das Senden von PUT und DELETE-Anfragen wie erwartet funktioniert -- das XMLHttpRequest wird erfolgreich abgeschlossen und die Anfrage erscheint in den Server-Logs mit der richtigen Methode. Gibt es etwas, das ich übersehe, wie zum Beispiel die Browserkompatibilität oder nicht offensichtliche Einschränkungen?

1 Stimmen

Es sind nicht nur die Client-Anwendungen, um die Sie sich kümmern müssen, viele Server-Frameworks unterstützen nur GET und POST.

7 Stimmen

John, irgendeinen Grund, warum du das REST-Tag nicht möchtest?

11 Stimmen

Obwohl die Personen, die dies lesen, wahrscheinlich RESTful APIs untersuchen.

476voto

Matthew Murdoch Punkte 29886

Nein. Die HTML 5 Spezifikation erwähnt:

Die Methoden- und Formmethoden-Inhaltsattribute sind aufgezählte Attribute mit den folgenden Schlüsselwörtern und Zuständen:

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

Das Schlüsselwort post, das dem Zustand POST zugeordnet ist und auf die HTTP-POST-Methode hinweist. Die POST-Methode fordert den Server auf, die übermittelten Daten des Formulars zur Verarbeitung anzunehmen, was zu einer Hinzufügung eines Elements in einer Datenbank, der Erstellung einer neuen Webseitenressource, der Aktualisierung der vorhandenen Seite oder allen genannten Ergebnissen führen kann.

Das Schlüsselwort dialog, das dem Zustand Dialog zugeordnet ist und anzeigt, dass das Absenden des Formulars beabsichtigt ist, das Dialogfeld zu schließen, in dem sich das Formular befindet, falls vorhanden, und andernfalls nicht abzusenden.

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

D.h. HTML-Formulare unterstützen nur GET und POST als HTTP-Anforderungsmethoden. Ein Workaround hierfür ist das Tunneln anderer Methoden durch POST mithilfe eines versteckten Formularfelds, das vom Server gelesen wird und die Anforderung entsprechend weiterleitet.

Allerdings werden GET, POST, PUT und DELETE von den Implementierungen von XMLHttpRequest (d.h. AJAX-Aufrufen) in allen gängigen Webbrowsern (IE, Firefox, Safari, Chrome, Opera) unterstützt.

3 Stimmen

"HTML (bis zur Version 4 und XHTML 1)" <- Ich nehme an, Sie meinten HTTP. Bedenken Sie: HTML ist ein Dateiformat (wie .exe, .doc oder .psd) und HTTP ist ein Protokoll für Informationsaustausch (wie HTML-Webseiten, Bilder oder Word .doc-Dateien).

172 Stimmen

Nein, ich meine definitiv HTML (Ich spreche über die Möglichkeiten von HTML-Formularen, obwohl das aus dem Text möglicherweise nicht klar wird - ich werde es bearbeiten)

6 Stimmen

@Matthew: Bedeutet das, dass wenn ich IE6 oder IE7 verwende, mit dem Folgenden:

...

, es nicht funktionieren wird, weil PUT für HTML 4 ungültig ist?

90voto

Anne Punkte 6157

HTML-Formulare unterstützen GET und POST. (HTML5 hat zu einem Zeitpunkt PUT/DELETE hinzugefügt, aber diese wurden verworfen.)

XMLHttpRequest unterstützt jede Methode, einschließlich CHICKEN, obwohl einige Methodennamen gegen Groß- und Kleinschreibung (Methoden sind bezüglich HTTP Groß- und Kleinschreibung beachten müssen) abgeglichen werden und einige Methodennamen aus Sicherheitsgründen überhaupt nicht unterstützt werden (z.B. CONNECT).

Fetch API unterstützt ebenfalls jede Methode außer CONNECT, TRACE und TRACK, die aus Sicherheitsgründen verboten sind.

Browser nähern sich langsam den Regeln an, die von XMLHttpRequest angegeben werden, aber wie der andere Kommentar darauf hinweist, gibt es immer noch einige Unterschiede.

5 Stimmen

Der neueste HTML5-Entwurf scheint die Unterstützung für PUT und DELETE fallen gelassen zu haben: dev.w3.org/html5/spec/Overview.html#attr-fs-method

3 Stimmen

Ein Entwurf wurde vorgeschlagen, um sie zurückzubekommen: amundsen.com/examples/put-delete-forms

27 Stimmen

HÜHNCHEN? Der Vogel? Ich nehme an, du meinst CHECKIN. Das ist ein lustiger Vokalwechsel.

44voto

Vihung Punkte 12148

XMLHttpRequest ist ein Standardobjekt im JavaScript-Objektmodell.

Laut Wikipedia erschien XMLHttpRequest erstmals in Internet Explorer 5 als ActiveX-Objekt, wurde jedoch später zu einem Standardobjekt und wurde seit Version 1.0 in der Mozilla-Familie, Apple Safari 1.2, Opera 7.60-p1 und IE 7.0 für die Verwendung in JavaScript aufgenommen.

Die open()-Methode des Objekts nimmt als Argument die HTTP-Methode an - und ist spezifiziert, jede gültige HTTP-Methode (siehe Punkt 5 des Links) anzunehmen - einschließlich GET, POST, HEAD, PUT und DELETE, wie in RFC 2616 angegeben.

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

7 Stimmen

Ich hoffte, einige Dokumentationsstücke für weitere Lektüre zu sehen, ich habe nicht gesagt, dass ich dir nicht glaube. Die Links auf Wikipedia sind eigentlich ziemlich gut. Danke.

25voto

_method verstecktes Feld Workaround

Verwendet in Rails und kann auf jedes Framework angepasst werden:

  • fügen Sie einem Formular, das nicht GET oder POST ist, einen versteckten _method-Parameter hinzu:

    Dies kann automatisch in Frameworks durch die HTML-Erstellungshilfsmethode erfolgen (z.B. Rails form_tag)

  • Korrigiere die tatsächliche Form-Methode auf POST (

    `)

    `

* verarbeitet `_method` auf dem Server und tut genau das, als ob diese Methode anstelle von tatsächlichem POST gesendet worden wäre

`

Begründung / Geschichte, warum es nicht möglich ist: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

`

0 Stimmen

Santilli, hallo Kumpel, es ist schon lange her, seit du diese Lösung angeboten hast, und da ich Anfänger in der Webentwicklung bin, habe ich eine Frage, auf die ich hoffe, dass du antwortest. Du hast gesagt, dass "Prozesse _methode auf dem Server und genau so tun, als ob diese Methode anstelle des tatsächlichen POST gesendet worden wäre". Meintest du damit, dass wenn eine versteckte Methode mit PUT (oder DELETE) in der Ansicht platziert wird, dies tatsächlich eine PUT (oder DELETE) Anfrage bedeuten würde? Wenn ja, warum dann die POST-Methode zu Beginn verwenden und dann verstecktes PUT oder DELETE verwenden. Was ist die Verbindung zwischen POST und PUT (oder DELETE) :)

1 Stimmen

@Mirich Das Formular unterstützt nur POST. Daher senden wir POST mit zusätzlichen Daten, die der Server als Bedeutung erkennt: Ah, ich sollte dies behandeln wie ein PUT.

0 Stimmen

Vielen Dank, Ciro, für Ihre Aufmerksamkeit und Antwort. Kann ich dieses Szenario also wie folgt betrachten: POST ist eine universelle Sache, die tatsächliches POST, PUT, PATCH und DELETE in sich enthält. Wenn Sie POST am Anfang ohne "hidden" verwenden, bedeutet das tatsächliches POST. Aber wenn Sie POST mit "hidden" (PUT oder DELETE) verwenden, lassen Sie den Server wissen, dass Sie PUT oder DELETE verwenden möchten, die sich innerhalb von POST als deren Unterelemente befinden. Ich weiß, die Analogie ist ein wenig seltsam, aber ist das korrekt? :)

18voto

Hank Gay Punkte 67607

Ich glaube, diese Kommentare beziehen sich speziell auf die Browser, d.h. auf das Klicken von Links und das Absenden von Formularen, nicht auf XMLHttpRequest. XMLHttpRequest ist nur ein benutzerdefinierter Client, den du in JavaScript geschrieben hast und der den Browser als Laufzeit verwendet.

UPDATE: Zur Klarstellung, ich habe nicht gemeint (obwohl ich es geschrieben habe), dass du XMLHttpRequest geschrieben hast; ich meinte, dass du den Code geschrieben hast, der XMLHttpRequest verwendet. Die Browser unterstützen XMLHttpRequest nicht nativ. XMLHttpRequest stammt aus der JavaScript-Laufzeit, die von einem Browser gehostet werden kann, obwohl es nicht zwingend erforderlich ist (siehe Rhino). Deshalb sagen die Leute, dass die Browser PUT und DELETE nicht unterstützen - weil es tatsächlich JavaScript ist, das sie unterstützt.

0 Stimmen

XMLHttpRequest ist ein Standardobjekt im JavaScript-Objektmodell.

9 Stimmen

@Jacob Stimmt, aber verschiedene Browser haben unterschiedliche JavaScript-Engines. Es ist dennoch hilfreich zu wissen, welche PUT unterstützen.

2 Stimmen

es ist eigentlich JavaScript, das sie unterstützt. Nicht wirklich wahr. XMLHttpRequest ist ein 'Host-Objekt', was bedeutet, dass es ein Objekt ist, das Funktionen des Hosts für JavaScript-Code freigibt. Es ist kein Teil von JS selbst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X