web-dev-qa-db-fra.com

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 permet pas de tester HTTP PUT, DELETE et même, dans une certaine mesure, HTTP POST.

J'ai aussi entendu dire que les navigateurs ne prennent en charge que GET et POST, provenant d'autres sources telles que:

Cependant, quelques tests rapides dans Firefox montrent que l’envoi des requêtes PUT et DELETE fonctionne comme prévu - le XMLHttpRequest s’achève avec succès et la demande apparaît dans les journaux du serveur avec la bonne méthode. . Y a-t-il un aspect de ce qui me manque, tel que la compatibilité entre navigateurs ou des limitations non évidentes?

596
John Millikin

Le HTML 5 spec mentionne:

Les attributs de contenu method et formmethod sont des attributs énumérés avec les mots-clés et états suivants:

Le mot clé obtient , en correspondance avec l'état GET, indiquant la méthode HTTP GET. La méthode GET doit uniquement demander et récupérer des données et ne doit avoir aucun autre effet.

Le mot clé post , mappé sur l'état POST, indiquant la méthode HTTP POST. La méthode POST demande au serveur d'accepter le traitement des données du formulaire soumis, ce qui peut entraîner l'ajout d'un élément à une base de données, la création d'une nouvelle ressource de page Web, la mise à jour de la page existante, ou tous les résultats mentionnés.

Le mot-clé dialogue , mappé sur le dialogue d'état, indiquant que l'envoi du formulaire est destiné à fermer la boîte de dialogue dans laquelle le formulaire se trouve, le cas échéant, et sinon ne pas soumettre.

La valeur par défaut non valide pour ces attributs est l'état GET

C'est à dire. Les formulaires HTML ne supportent que GET et POST en tant que requête HTTP méthodes. Une solution consiste à faire passer d'autres méthodes par le biais de 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 AJAX appels) dans tous les principaux navigateurs Web (IE, Firefox, Safari, Chrome, Opera).

457
Matthew Murdoch

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éthodes soient comparés à la casse (les méthodes respectent la casse par HTTP) et que certains noms de méthodes ne soient 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’a souligné l’autre commentaire, il subsiste certaines différences.

78
Anne

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 est depuis devenu un standard et a été inclus pour une utilisation en JavaScript dans la famille Mozilla depuis la version 1.0, Apple Safari 1.2, Opera 7.608-p1 et IE 7.0.

La méthode open() sur l'objet prend la méthode HTTP en tant qu'argument. Elle est spécifiée comme prenant une méthode HTTP valide (voir le numéro d'élément 5 du lien), y compris GET, POST, HEAD, PUT et DELETE, as spécifié par la RFC 2616 .

Remarque secondaire IE 7–8 n'autorise que les méthodes HTTP suivantes: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH". , "MKCOL", "COPY", "LOCK", "UNLOCK" et "OPTIONS" .

41
Vihung

_method solution de contournement du champ caché

Utilisé dans Rails et peut être adapté à n’importe quel framework:

  • ajoutez un paramètre _method masqué à tout formulaire autre que GET ou POST:

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

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

  • corrige la méthode de formulaire actuelle à POST (<form method="post")

  • traite _method sur le serveur et fait comme si cette méthode avait été envoyée à la place du POST réel

Justification/historique de la raison pour laquelle il est impossible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

Je crois que ces commentaires font spécifiquement référence aux navigateurs, c’est-à-dire qu’ils cliquent sur des liens et soumettent des formulaires, et non pas XMLHttpRequest. XMLHttpRequest est simplement un client personnalisé que vous avez écrit en JavaScript et qui utilise le navigateur comme runtime.

UPDATE: Pour clarifier, je ne voulais pas dire (même si j'ai écrit) que vous avez é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, 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
Hank Gay

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

Pour être conforme à XMLHttpRequest Level 2 , les navigateurs doivent prendre en charge 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 ne dispose pas du support atm (juli '15), mais Opera Mini ne prend pas en charge tout. :)

9
Stijn de Witt

Juste pour ajouter - Safari 2 et les versions antérieures ne prenaient définitivement pas en charge PUT et DELETE. J'ai eu l'impression 3, mais je n'ai plus le temps de tester. Safari 4 supporte définitivement PUT et DELETE.

7
jharlap