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:

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?

War es hilfreich?

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.

aufgenommen

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:

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

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top