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

StackOverflow https://stackoverflow.com/questions/165779

Question

J'ai déjà lu quelques questions telles que 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 également entendu dire que les navigateurs ne prennent en charge que les méthodes GET et POST, provenant d'autres sources telles que:

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

Était-ce utile?

La solution

Non. La spécification HTML 5 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é get , mappé à l'état GET, indiquant HTTP GET.   méthode. La méthode GET doit uniquement demander et récupérer des données et   ne devrait avoir aucun autre effet.

     

Le mot clé post , mappant sur l'état   POST, indiquant la méthode HTTP POST. La méthode POST demande que   le serveur accepte les données du formulaire soumis à traiter, ce qui peut entraîner   créer un élément dans une base de données, créer un nouveau site Web   ressource de page, la mise à jour de la page existante, ou de tous les   résultats mentionnés.

     

Le mot clé dialogue , qui correspond à la boîte de dialogue d'état, indiquant que   soumettre le formulaire est destiné à fermer la boîte de dialogue dans laquelle le   la forme 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

I.e. Les formulaires HTML prennent uniquement en charge GET et POST en tant que méthodes de requête HTTP. Une solution consiste à tunnelliser d’autres méthodes via POST en utilisant un champ de formulaire caché qui est lu par le serveur et la demande envoyée en conséquence.

Toutefois, GET , POST , PUT 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).

Autres conseils

Les formulaires HTML prennent en charge GET et POST. (HTML5 à un moment donné 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 quelques différences.

XMLHttpRequest est un objet standard dans le modèle d’objet JavaScript.

Selon Wikipedia, open() est apparu pour la première fois dans Internet Explorer 5 Objet ActiveX, mais a depuis été transformé en standard et 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 La GET méthode sur l'objet prend la méthode HTTP en tant qu'argument - et est définie comme prenant toute méthode HTTP valide (voir le numéro d'élément 5 du lien) - y compris POST, HEAD, <= >, PUT et DELETE, comme spécifiés par le RFC 2616 .

Remarque secondaire IE 7 # 8211; 8 n'autorisent que les méthodes HTTP suivantes: & "GET &", & "POST &", & "HEAD &", "PUT &", & "SUPPRIMER &", & "MOVE &", & "PROPFIND &", & " ; PROPPATCH & "; &" MKCOL & "; &" COPY & ", &" LOCK & ", &" UNLOCK " " ;, et " OPTIONS " .

Je pense 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 XMLHttpRequest. PUT est simplement un client personnalisé que vous avez écrit en JavaScript et qui utilise le navigateur comme moteur d'exécution.

UPDATE: Pour préciser, je ne voulais pas dire (bien que j'aie écrit) que vous ayez écrit DELETE; Je voulais dire que vous avez écrit le code qui utilise <=>. Les navigateurs ne supportent pas nativement <=>. <=> provient de l'exécution de JavaScript, qui peut être hébergée par un navigateur, bien que cela ne soit pas obligatoire (voir Rhino ). C’est pourquoi les internautes affirment que les navigateurs ne prennent pas en charge <=> et <=> & # 8212; c’est en fait le JavaScript qui les prend en charge.

_method Solution de contournement du champ caché

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

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

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

    Cela peut être fait automatiquement dans les frameworks via la méthode d'assistance à la création HTML (par exemple, Rails <form method="post")

  • corrige la méthode de formulaire actuelle en POST (<=>)

  • traite <=> sur le serveur et procède exactement comme si cette méthode avait été envoyée à la place du POST réel

Raisons / historique expliquant pourquoi cela n’est pas possible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

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

Pour être conforme aux XMLHttpRequest Level 2 des navigateurs doivent être prend en charge ces méthodes. Pour vérifier quels navigateurs prennent en charge XMLHttpRequest Level 2, je vous recommande CanIUse:

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

Seul Opera Mini manque d’atmosphère (juli '15), mais Opera Mini ne prend pas en charge tout. :)

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top