2011-03-03 23 views
31

Acabo de terminar de construir una API RESTful para una de mis últimas aplicaciones. También construí una clase simple de andamios de interfaz de administrador que enumerará recursos y creará formularios y tablas simples para editar, crear, eliminar, etc.¿Por qué los navegadores modernos no son compatibles con los métodos de forma PUT y DELETE?

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

<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 lo que permite 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.

He buscado una respuesta, y he podido encontrarla especificada como parte de the XHTML 2.0 spec. No hay mención de ello in the HTML5 spec.

¿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?

+0

¿Estás seguro de que @JoostBaaij que no lo intenté yo mismo, pero MDN no hace ninguna mención de ella https://developer.mozilla.org/en-US/docs/Web/HTML/Element/formulario –

+0

@JoostBaaij Solo doblemente verificado. Envíe este formulario http://jsbin.com/IWoWiRi/1/ y luego inspeccione la solicitud aquí http://requestb.in/ol62w4ol?inspect en Chrome30, FF24, IE10 'method =" PUT "' todo aparece como 'GET 'Entonces lo siento pero estás equivocado. –

+0

Si no lo hace, aún puede abrir una conexión telnet en el puerto 80 e iniciar los comandos con un script del lado del cliente. – user2284570

Respuesta

8

HTML 4.01 solo admite publicación y obtención, consulte http://www.w3.org/TR/html4/interact/forms.html#h-17.3 No estoy seguro acerca de otras especificaciones de HTML.

+1

ye Lo sé, me pregunto por qué, con la popularidad de REST hoy en día, no se está implementando en "navegadores HTML5" – nikcub

+0

XHTML 2 (XForms 1.1 para ser más precisos) la especificación incluye métodos PUT y DELETE. Ver http://www.w3.org/TR/xforms11/#submit-put – Harri

+0

HTML5 en su estado actual no incluye esos métodos, http://dev.w3.org/html5/spec/Overview.html#attr -fs método – Harri

19

Algunos marcos de web (por ejemplo, Ruby on Rails) moverse por que mediante la inclusión de un _method parámetro oculto en el formulario con el valor del método "actual", por ejemplo:

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

El marco entonces 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 lo ayuda.

+0

gracias .. http://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-put-or-delete-methods-work –

+1

laravel (PHP) también lo hace. – Praveen

5

En realidad hice una muy pequeña cantidad de investigación & encontré esta respuesta en otro foro de Stackexchange.

Sé que no es una buena respuesta para publicar un enlace, pero no sé la respuesta exacta. Entonces, es la única forma en que puedes resolver tu duda.

https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms

+0

Técnicamente esto ya se señaló en los comentarios pero sí. Creo que esto puede calificar como la respuesta. –

+0

gracias @GeorgeMauer –

Cuestiones relacionadas