235 votes

Utilisation de la méthode PUT dans un formulaire HTML

Puis-je utiliser une méthode PUT dans un formulaire HTML pour envoyer des données du formulaire à un serveur ?

256voto

phihag Points 89765

Según el Norme HTML vous pouvez no . Les seules valeurs valables pour l'attribut "méthode" sont les suivantes get y post correspondant aux méthodes HTTP GET et POST. <form method="put"> est un HTML invalide et sera traité comme <form> c'est-à-dire envoyer une demande GET.

Au lieu de cela, de nombreux frameworks utilisent simplement un paramètre POST pour tunneliser la méthode HTTP :

<form method="post" ...>
  <input type="hidden" name="_method" value="put" />
...

Bien entendu, cela nécessite un déballage côté serveur.

6 votes

Vous avez été mis en relation avec une ébauche, et non avec une norme finale. Il est à noter que les versions HTML stables ne le proposent pas non plus.

16 votes

@hakre HTML5 est déjà la norme de facto, et elle évoluera probablement avec le temps. Ce que le W3C appelle "Draft" est un document développé sur au moins 3 ans avec la contribution des vendeurs de navigateurs avec plus de >99%, et a déjà été mis en œuvre (au moins quand il s'agit de cette section et la plupart des sections non ésotériques) par tous pour toujours. Mais juste pour les pinailleurs, voici la définition équivalente dans HTML 4.01 (une demande technique dans les termes du W3C).

3 votes

S'il vous plaît, ne vous sentez pas offensé, j'ai déjà écrit que c'était juste une note et que les autres versions HTML ne le proposent pas non plus (avec une légère exception pour XHTML 2, mais c'est un projet obsolète maintenant).

154voto

dqhendricks Points 11630

Les formulaires XHTML 1.x ne prennent en charge que GET et POST. GET et POST sont les seules valeurs autorisées pour l'attribut l'attribut "method".

10 votes

Le XHTML est quelque peu dépassé. Pourtant, il semble que les deux mêmes valeurs soient valides en html5. developer.mozilla.org/fr/US/docs/Web/HTML/Element/

51voto

hakre Points 102271

Puis-je utiliser la méthode "Put" dans le formulaire HTML pour envoyer les données du formulaire HTML au serveur ?

Oui, vous pouvez le faire, mais gardez à l'esprit que cela ne donnera pas lieu à une demande PUT mais à une demande GET. Si vous utilisez une valeur non valide pour le paramètre method de l'attribut <form> le navigateur utilisera la valeur par défaut get .

Les formulaires HTML (jusqu'à la version 4 de HTML (, 5 Draft) et XHTML 1) ne supportent que GET et POST comme méthodes de requête HTTP. Une solution de contournement consiste à faire passer d'autres méthodes par POST en utilisant un champ de formulaire caché qui est lu par le serveur et la requête est envoyée en conséquence. XHTML 2.0 prévoyait autrefois de prendre en charge les fonctions GET, POST, PUT et DELETE pour les formulaires, mais elle est en train d'être transformée en un système de gestion de l'information. XHTML5 de HTML5 qui ne prévoit pas de prendre en charge PUT. [mise à jour vers]

Vous pouvez également proposer un formulaire, mais au lieu de le soumettre, créez et envoyez une requête XMLHttpRequest en utilisant la méthode PUT avec JavaScript.

1 votes

1 votes

Une demande AJAX ne peut pas remplacer complètement une demande de formulaire car une demande de formulaire redirige l'utilisateur vers la ressource donnée. Par exemple, il n'existe pour l'instant aucun moyen d'afficher dans le navigateur la page de la route PUT /resource .

0 votes

C'est une mauvaise idée de faire ça. Les frameworks peuvent ignorer les paramètres de formulaire pour les PUT. Le HTTPServlet de Java semble le faire. Nous avions un bogue où HttpRequest.getParameterMap() n'a pas retourné de paramètres de formulaire.

41voto

Ciro Santilli Points 3341

_method contournement des champs cachés

La technique simple suivante est utilisée par quelques frameworks web :

  • ajouter un caché _method à tout formulaire qui n'est pas GET ou POST :

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

    Cela peut être fait automatiquement dans les frameworks par la méthode de l'aide à la création HTML.

  • fixer la méthode de formulaire actuelle à 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.

Vous pouvez y parvenir en :

  • Rails : form_tag
  • Laravel : @method("PATCH")

Justification / historique des raisons pour lesquelles ce n'est pas possible en HTML pur : https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

14voto

aladin Points 11

pour les personnes utilisant laravel

<form method="post" ...>
@csrf
@method('put')
...
</form>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X