Usando el método PUT en formato HTML
¿Puedo usar un método PUT en un formulario HTML para enviar datos del formulario a un servidor?
Según el estándar HTML , no es posible . Los únicos valores válidos para el atributo método son get
y 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.
Los formularios XHTML 1.x sólo admiten GET y POST. GET y POST son los únicos valores permitidos para el atributo "método".
¿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 method
atributo 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.
_method
solución de campo oculto
Algunos marcos web utilizan la siguiente técnica simple:
agregue un
_method
pará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
_method
en 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>