J'ai vu quelques questions ici comme Comment déboguer les services RESTful , 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 dire que les navigateurs ne prennent en charge que GET et POST, à partir d'autres sources telles que:
- 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
Cependant, quelques tests rapides dans Firefox montrent que l'envoi PUT
et les DELETE
demandes fonctionnent comme prévu - le se XMLHttpRequest
termine avec succès et la demande apparaît dans les journaux du serveur avec la bonne méthode. Y a-t-il un aspect qui me manque, comme la compatibilité entre les navigateurs ou des limitations non évidentes?
http
cross-browser
browser
ajax
John Millikin
la source
la source
Réponses:
Non. La spécification HTML 5 mentionne:
C'est-à-dire que les formulaires HTML ne prennent en charge que GET et POST en tant que méthodes de requête HTTP. Une solution de contournement pour cela consiste à tunneler d'autres méthodes via POST en utilisant un champ de formulaire masqué qui est lu par le serveur et la demande envoyée en conséquence.
Cependant, GET , POST , PUT et DELETE sont pris en charge par les implémentations de XMLHttpRequest (c'est-à-dire les appels AJAX) dans tous les principaux navigateurs Web (IE, Firefox, Safari, Chrome, Opera).
la source
Les formulaires HTML prennent en charge GET et POST. (HTML5 à un moment donné a ajouté PUT / DELETE, mais ceux-ci ont été supprimés.)
XMLHttpRequest prend en charge toutes les méthodes, y compris CHICKEN, bien que certains noms de méthode soient mis en correspondance avec la casse (les méthodes sont sensibles à la casse par HTTP) et certains noms de méthode ne sont pas du tout pris en charge pour des raisons de sécurité (par exemple CONNECT).
Les navigateurs convergent lentement sur les règles spécifiées par XMLHttpRequest, mais comme l'autre commentaire l'a souligné, il existe encore quelques différences.
la source
XMLHttpRequest
est un objet standard dans le modèle d'objet JavaScript.Selon Wikipedia,
XMLHttpRequest
est apparu pour la première fois dans Internet Explorer 5 en tant qu'objet ActiveX, mais a depuis été transformé en standard et a été inclus pour être utilisé dans JavaScript dans la famille Mozilla depuis 1.0, Apple Safari 1.2, Opera 7.60-p1 et IE 7.0 .La
open()
méthode de l'objet prend la méthode HTTP comme argument - et il est spécifié que la prise de toute méthode HTTP valide (voir le numéro de l' article 5 de la liaison) - y comprisGET
,POST
,HEAD
,PUT
etDELETE
, comme spécifié par le RFC 2616 .En guise de remarque, IE 7–8 n'autorise que les méthodes HTTP suivantes: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL" , "COPIER", "VERROUILLER", "DÉVERROUILLER" et "OPTIONS" .
la source
_method
solution de contournement de champ cachéUtilisé dans Rails et pourrait être adapté à n'importe quel framework:
ajoutez un
_method
paramètre caché à tout formulaire qui n'est pas GET ou POST:Cela peut être fait automatiquement dans les frameworks via la méthode d'aide à la création HTML (par exemple Rails
form_tag
)corriger la méthode de formulaire réelle à POST (
<form method="post"
)processus
_method
sur le serveur et faire exactement comme si cette méthode avait été envoyée au lieu du POST réelJustification / historique des raisons pour lesquelles cela n'est pas possible: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
la source
Je crois que ces commentaires se réfèrent spécifiquement aux navigateurs, c'est-à-dire, en cliquant sur des liens et en soumettant des formulaires, non
XMLHttpRequest
.XMLHttpRequest
est juste un client personnalisé que vous avez écrit en JavaScript et qui utilise le navigateur comme runtime.MISE À JOUR: Pour clarifier, je ne voulais pas (bien que j'aie écrit) que vous avez écrit
XMLHttpRequest
; Je voulais dire que vous avez écrit le code qui utiliseXMLHttpRequest
. Les navigateurs ne prennent pas en charge nativementXMLHttpRequest
.XMLHttpRequest
provient du moteur d'exécution JavaScript, qui peut être hébergé par un navigateur, bien qu'il ne soit pas obligatoire de le faire (voir Rhino ). C'est pourquoi les gens disent que les navigateurs ne prennent pas en chargePUT
etDELETE
— parce que c'est en fait JavaScript qui les prend en charge.la source
it's actually JavaScript that is supporting them
. Pas vraiment vrai.XMLHttpRequest
est un «hôte-objet», ce qui signifie que c'est un objet qui expose les fonctionnalités de l'hôte au code Javascript. Cela ne fait pas partie de JS lui-même.YES , PUT, DELETE, HEAD, etc. Les méthodes HTTP sont disponibles dans tous les navigateurs modernes.
Pour être compatible avec XMLHttpRequest, les navigateurs de niveau 2 doivent prendre en charge ces méthodes. Pour vérifier quels navigateurs prennent en charge XMLHttpRequest niveau 2, je recommande CanIUse:
http://caniuse.com/#feat=xhr2
Seul Opera Mini manque de support atm (juli '15), mais Opera Mini manque de support pour tout. :)
la source
Juste pour ajouter - Safari 2 et les versions antérieures ne prenaient certainement pas en charge PUT et DELETE. J'ai l'impression que 3 l'ont fait, mais je ne l'ai plus à tester. Safari 4 prend définitivement en charge PUT et DELETE.
la source