method form attribute html browser specifications

html - attribute - ¿Por qué los navegadores modernos no admiten los métodos de forma PUT y DELETE?



title css (3)

Acabo de terminar de construir una API RESTful para una de mis últimas aplicaciones. También construí una clase sencilla de andamios de interfaz de administrador que enumerará recursos y creará formularios y tablas simples para editar, crear, eliminar, etc.

Para actualizar y eliminar recursos, la clase genera un formulario con métodos de PUT y DELETE, bastante simple:

<form action="/posts/xxxxxxx" method="DELETE"> <input type="submit" value="Delete" /> </form>

y

<form action="/posts/xxxxxxx" method="PUT"> <input type="text" name="username" value="nikcub" /> <input type="text" name="fullname" value="Nik Cubrilovic" /> <input type="text" name="email" value="[email protected]" /> <input type="submit" value="Update" /> </form>

Muy simple. Si se detecta Javascript, interceptará el formulario y utilizará una solicitud XMLHTTP para enviar de nuevo. El Javascript admite los otros métodos HTTP, pero ¿por qué los navegadores modernos no son compatibles con los métodos PUT y DELETE? Termina enviando un GET.

Preferiría que cuando la aplicación recurra al HTML estándar con los mismos métodos, en lugar de tener que usar campos ocultos y la lógica para eso en la clase, o peor, poner el método en el URI y permitir que GET funcione .

No puedo pensar en ninguna razón por la que los navegadores no admitan los otros métodos HTTP, ya que los desarrolladores simplemente están trabajando en ello de todos modos pirateando GET o utilizando POST.

Busqué una respuesta y pude encontrarla especificada como parte de la especificación XHTML 2.0 . No se menciona en las especificaciones de HTML5 .

¿Hay alguna razón para que no sea compatible con los navegadores "compatibles con HTML5"? ¿Dónde puedo publicar una solicitud para abrir esta copia de seguridad e implementarla en los navegadores?


Algunos marcos web (por ejemplo, Ruby on Rails) lo _method al incluir un parámetro oculto _method en el formulario con el valor del método "real", por ejemplo:

<form action="/posts/xxxxx" method="POST"> <input type="hidden" name="_method" value="DELETE"> <input type="submit" value="delete"> </form>

El marco luego reescribe la solicitud en el lado del servidor antes del procesamiento para usar el valor del parámetro _method como método HTTP.

No sé si esto te ayuda.