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:

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?

573
demandé sur Community 2008-10-03 09:26:59

7 réponses

Les formulaires HTML

(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).

434
répondu Matthew Murdoch 2015-05-12 19:01:12

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.

75
répondu Anne 2010-10-27 13:35:33

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" .

40
répondu Vihung 2018-07-11 13:35:21

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.

15
répondu Hank Gay 2008-10-27 18:07:44

_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

13

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.

8
répondu jharlap 2009-07-31 14:39:13

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:

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

seul Opera Mini est absent support atm (juli ' 15), mais Opera Mini manque de support pour tout. :)

7
répondu Stijn de Witt 2015-07-21 20:52:42