Les méthodes PUT, DELETE, HEAD, etc sont-elles disponibles dans la plupart des navigateurs web?
j'ai vu quelques questions par ici comme comment déboguer services de repos , qui mentionne:
malheureusement ce même navigateur ne me permettra pas de tester HTTP PUT, DELETE, et dans une certaine mesure même HTTP POST.
j'ai également entendu que les navigateurs ne prennent en charge que GET and POST, à partir de certaines autres sources comme:
- 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
cependant, quelques tests rapides dans Firefox montrent que l'envoi des requêtes PUT
et DELETE
fonctionne comme prévu -- le XMLHttpRequest
complète avec succès, et la requête s'affiche dans les journaux du serveur avec la bonne méthode. Y a-t-il un aspect qui me manque, comme la compatibilité croisée des navigateurs ou des limites non évidentes?
7 réponses
(jusqu'à la version HTML 4 et XHTML 1) ne prennent en charge que GET et POST comme méthodes de requête HTTP. Une solution de rechange est de faire passer D'autres méthodes dans POST en utilisant un champ de formulaire caché qui est lu par le serveur et la requête envoyée en conséquence.
Toutefois, GET , POST , METTRE et SUPPRIMER sont pris en charge par les implémentations de XMLHttpRequest (appels AJAX) dans tous les principaux navigateurs web (IE, Firefox, Safari, Chrome, Opera).
HTML forms support GET and POST. (HTML5 à un point ajouté PUT / DELETE, mais ceux-ci ont été supprimés.)
XMLHttpRequest supporte toutes les méthodes, y compris le poulet, bien que certains noms de méthode soient mis en correspondance avec cas-insensitively (les méthodes sont sensibles à la casse par HTTP) et certains noms de méthode ne sont pas pris en charge du tout pour des raisons de sécurité (par exemple CONNECT).
les navigateurs convergent lentement sur les règles spécifiées par XMLHttpRequest, mais comme les autres commentaire soulignait il y a encore quelques différences.
XMLHttpRequest
est un objet standard du modèle JavaScript.
selon Wikipedia, XMLHttpRequest
apparu pour la première fois dans Internet Explorer 5 comme un objet ActiveX, mais a depuis été transformé en un standard et a été inclus pour une utilisation en JavaScript dans la famille Mozilla depuis 1.0, Apple Safari 1.2, Opera 7.60-p1, et IE 7.0.
la open()
méthode sur l'objet prend la méthode HTTP comme argument-et est spécifié comme prenant toute méthode HTTP valide ( voir le numéro d'article 5 du lien) - y compris GET
, POST
, HEAD
, PUT
et DELETE
, en tant que spécifié par la RFC 2616 .
comme note latérale IE 7-8 ne permettent que les méthodes HTTP suivantes: "GET", "POST"," HEAD"," PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY"," LOCK"," UNLOCK", et " OPTIONS" .
je crois que ces commentaires se réfèrent spécifiquement aux navigateurs, c.-à-d., en cliquant sur les liens et en soumettant des formulaires, pas XMLHttpRequest
. XMLHttpRequest
est juste un client personnalisé que vous a écrit en JavaScript qui utilise le navigateur comme un exécution.
mise à jour: pour clarifier, Je ne voulais pas dire (bien que j'ai écrit) que vous a écrit XMLHttpRequest
; je voulais dire que vous avez écrit le code qui utilise XMLHttpRequest
. Les navigateurs ne sont pas nativement support XMLHttpRequest
. XMLHttpRequest
provient du JavaScript runtime, qui peut être hébergé par un navigateur, bien qu'il ne soit pas obligatoire de l'être (voir Rhino ). C'est pourquoi les gens disent que les navigateurs ne supportent pas PUT
et DELETE
-parce que C'est JavaScript qui les supporte.
_method
champ caché contournement
utilisé dans les Rails et pouvant être adapté à n'importe quel cadre:
-
ajouter un paramètre caché
_method
à toute forme qui n'est pas GET ou POST:<input type="hidden" name="_method" value="DELETE">
cela peut être fait automatiquement dans les cadres par la méthode HTML creation helper (par ex. Rails
form_tag
) -
fix la méthode de la forme réelle à afficher (
<form method="post"
) -
processus
_method
sur le serveur et de faire exactement comme si cette méthode avait été envoyé à la place de la POSTE
Logique de l'histoire de pourquoi il n'est pas possible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms
juste pour ajouter - Safari 2 et plus tôt ne supportait certainement pas PUT et DELETE. J'ai l'impression que 3 l'a fait, mais je ne l'ai plus à tester. Safari 4 fait certainement le support PUT et DELETE.
YES , PUT, DELETE, HEAD etc les méthodes HTTP sont disponibles dans tous les navigateurs modernes.
Pour être en conformité avec la XMLHttpRequest Niveau 2 navigateurs doit l'appui de ces méthodes. Pour vérifier quels navigateurs prennent en charge XMLHttpRequest Level 2, je recommande CanIUse:
seul Opera Mini est absent support atm (juli ' 15), mais Opera Mini manque de support pour tout. :)