Usando el método PUT en formato HTML

Resuelto WelcomeTo asked hace 13 años • 10 respuestas

¿Puedo usar un método PUT en un formulario HTML para enviar datos del formulario a un servidor?

WelcomeTo avatar Nov 08 '11 23:11 WelcomeTo
Aceptado

Según el estándar HTML , no es posible . Los únicos valores válidos para el atributo método son gety post, correspondientes a los métodos HTTP GET y POST. <form method="put">es HTML no válido y será tratado como <form>, es decir, enviará una solicitud GET.

En cambio, muchos marcos simplemente usan un parámetro POST para tunelizar el método HTTP:

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

Por supuesto, esto requiere desenvolver el lado del servidor.

phihag avatar Nov 08 '2011 17:11 phihag

Los formularios XHTML 1.x sólo admiten GET y POST. GET y POST son los únicos valores permitidos para el atributo "método".

dqhendricks avatar Nov 08 '2011 17:11 dqhendricks

¿Puedo utilizar el método "Put" en formato HTML para enviar datos desde un formulario HTML al servidor?

Sí, puedes, pero ten en cuenta que no resultará en una solicitud PUT sino en una solicitud GET. Si utiliza un valor no válido para el methodatributo de la <form>etiqueta, el navegador utilizará el valor predeterminado get.

Los formularios HTML (hasta HTML versión 4 (, 5 Draft) y XHTML 1) solo admiten GET y POST como métodos de solicitud HTTP. Una solución para esto es canalizar otros métodos a través de POST utilizando un campo de formulario oculto que el servidor lee y envía la solicitud en consecuencia. XHTML 2.0 alguna vez planeó soportar GET, POST, PUT y DELETE para formularios, pero está pasando a XHTML5 de HTML5 , que no planea soportar PUT. [actualización para]

Alternativamente, puede ofrecer un formulario, pero en lugar de enviarlo, cree y active una XMLHttpRequest utilizando el método PUT con JavaScript.

hakre avatar Nov 08 '2011 17:11 hakre

_methodsolución de campo oculto

Algunos marcos web utilizan la siguiente técnica simple:

  • agregue un _methodparámetro oculto a cualquier formulario que no sea GET o POST:

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

    Esto se puede hacer automáticamente en marcos a través del método auxiliar de creación de HTML.

  • arreglar el método de formulario real a POST ( <form method="post")

  • procesa _methoden el servidor y hace exactamente como si ese método se hubiera enviado en lugar del POST real

Puedes lograr esto en:

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

Justificación/historia de por qué no es posible en HTML puro: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

para personas que usan laravel

<form method="post" ...>
@csrf
@method('put')
...
</form>
CodeToLife avatar Sep 20 '2020 11:09 CodeToLife