Question Les méthodes PUT, DELETE, HEAD, etc. sont-elles disponibles dans la plupart des navigateurs Web?


J'ai vu quelques questions ici comme Comment déboguer des 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 que les navigateurs ne supportent que GET et POST, à partir d'autres sources comme:

Cependant, quelques tests rapides dans Firefox montrent que l'envoi PUT et DELETE demande fonctionne comme prévu - le XMLHttpRequest se termine avec succès, et la demande apparaît dans les journaux du serveur avec la bonne méthode. Existe-t-il un aspect qui me manque, comme la compatibilité entre navigateurs ou des limitations non évidentes?


568
2017-10-03 05:26


origine


Réponses:


Les formulaires HTML (jusqu'à HTML version 4 et XHTML 1) prennent uniquement en charge OBTENIR et POSTER comme méthodes de requête HTTP. Une solution de contournement pour cela est de tunnel 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, OBTENIR, POSTER, METTRE et EFFACER  sont supporté par les implémentations de XMLHttpRequest (c'est-à-dire les appels AJAX) dans tous les principaux navigateurs Web (IE, Firefox, Safari, Chrome, Opera).


432
2017-10-03 12:02



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 supporte toutes les méthodes, y compris CHICKEN, bien que certains noms de méthodes soient comparés à la casse (les méthodes sont sensibles à la casse par HTTP) et certains noms de méthodes ne sont pas supportés 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.


74
2017-10-03 09:59



XMLHttpRequest est un objet standard dans le modèle JavaScript Object.

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.

le open() méthode sur l'objet prend la méthode HTTP comme un 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, comme spécifié par RFC 2616.

Comme une note de côté IE 7-8 autorise uniquement les méthodes HTTP suivantes: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL", "COPY" , "LOCK", "UNLOCK" et "OPTIONS".


40
2017-10-03 09:49



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, pas XMLHttpRequest. XMLHttpRequest est juste un client personnalisé toi a écrit en JavaScript qui utilise le navigateur comme moteur d'exécution.

MISE À JOUR: Pour clarifier, je ne voulais pas (bien que j'aie écrit) que toia écrit XMLHttpRequest; Je voulais dire que vous avez écrit le code qui utilise XMLHttpRequest. Les navigateurs ne supportent pas nativement XMLHttpRequest. XMLHttpRequest provient du runtime JavaScript, qui peut être hébergé par un navigateur, même si ce n'est pas obligatoire Rhinocéros). C'est pourquoi les gens disent que les navigateurs ne supportent pas PUT et DELETE-Parce que c'est JavaScript qui les supporte.


15
2017-11-12 21:49



_method solution de contournement du champ masqué

Utilisé dans Rails et pourrait être adapté à n'importe quel cadre:

  • ajouter un caché _method paramètre à n'importe quelle forme qui n'est pas GET ou POST:

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

    Cela peut être fait automatiquement dans les frameworks via la méthode d'aide à la création HTML (par exemple, Rails form_tag)

  • corrigez 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éel

Justification / histoire de la raison pour laquelle ce n'est pas possible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms


13
2017-07-31 14:39



Juste pour ajouter - Safari 2 et plus tôt ne supportaient définitivement pas PUT et DELETE. J'ai l'impression que 3 l'ont fait, mais je ne l'ai plus à tester. Safari 4 prend certainement en charge PUT et DELETE.


8
2017-07-21 20:52



OUI, PUT, DELETE, HEAD etc Les méthodes HTTP sont disponibles dans tous les navigateurs modernes.

Pour se conformer à XMLHttpRequest Niveau 2 navigateurs doit soutenir ces méthodes. Pour vérifier quels navigateurs supportent XMLHttpRequest Level 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. :)


7