Al mirar a mi alrededor, no puedo nombrar una sola aplicación web (no un servicio web) que utilice algo además de las solicitudes GET y POST. ¿Hay una razón específica para esto? ¿Algunos navegadores (o servidores) no admiten otros tipos de solicitudes? ¿O es esto solo por razones históricas? Me gustaría hacer uso de las solicitudes PUT y DELETE para hacer mi vida un poco más fácil desde el lado del servidor, pero soy reacio porque nadie más lo hace.¿Hay alguna razón para no usar HTTP PUT y DELETE en una aplicación web?
Respuesta
Actualmente, muchas personas usan PUT y DELETE, principalmente para API que no son de navegador. Algunos ejemplos son el protocolo de publicación Atom y las API de datos de Google:
Más allá de eso, no ve PUT/DELETE en el uso común porque la mayoría de los navegadores no lo hacen soporte PUT y DELETE a través de Forms. HTML5 parece ser la fijación de este:
La forma en que funciona para las aplicaciones de navegador es: la gente diseñar aplicaciones RESTful con PUT y DELETE en mente, a continuación, "túnel" esas peticiones a través de puestos de la navegador. Por ejemplo, ver a esta pregunta SO sobre cómo Ruby on Rails logra esto utilizando campos ocultos:
Por lo tanto, usted no estaría en su propio diseño de su aplicación con el conjunto más grande de HTTP verbos en mente
EDITAR: Por cierto, si tiene curiosidad acerca de por qué PUT/DELETE no se encuentran en las publicaciones del navegador, resulta que no hay una buena razón técnica. La lectura en torno a este hilo en la lista de correo de descanso discutir, especialmente los comentarios de Roy Fielding, es interesante para algún contexto:
EDIT: Hay algunos comentarios sobre si las bibliotecas de soporte AJAX todos los métodos . Se reduce a la implementación del navegador real de XMLHttpRequest. Pensé que alguien podría encontrar este enlace a mano, que prueba tu navegador para ver cuán compatible es el objeto HttpRequest con varias opciones de HTTP.
Por desgracia, no sé de una referencia que recoge estos resultados.
Algunos servidores proxy con políticas de seguridad difíciles pueden descartarlos. Estoy usando PUT y DELETE de todos modos.
He leído que algunos navegadores no son compatibles con otros métodos HTTP correctamente, aunque no puedo nombrar ningún detalle.
Los rieles, en particular, empaquetarán sus formularios con un parámetro de método para establecer explícitamente esto incluso si el navegador no admite esos métodos. Eso parece una precaución razonable si vas a hacer esto.
Sencillamente, el HTML 4.01 form
element sólo permite los valores "POST
" y "GET
" en su method
atributo
Hmm, eso tendría sentido ... Pero esto no se aplica a las solicitudes de Ajax, ¿verdad? Puedo usar cualquier método que quiera? –
Si el navegador está construido según la especificación HTML 4.01, no comprenderá nada más que la especificación. Eso es todo lo que puede suponer que un navegador puede hacer – Gareth
Los navegadores generalmente se compilan con algo más que una especificación HTML: JavaScript no es parte de HTML 4.01. – aehlke
esto depende de su navegador y biblioteca Ajax. Por ejemplo, jQuery admite todos los métodos HTTP aunque el navegador no lo haga. Ver por ejemplo jQuery "ajax" documentation en el atributo "tipo".
La estructura de Java Restlet le permite tunelizar peticiones PUT y DELETE mediante operaciones HTML POST. Para ello, sólo tiene que añadir method = poner o método = eliminar a su cadena de consulta de URI, por ejemplo:
http://www.example.com/user=xyz?method=delete ...
Esto es lo mismo que Ruby on Rails enfoque (como se describe por @ars arriba).
De la documentación de jQuery: "Otros métodos de solicitud HTTP, como PUT y DELETE, también se pueden usar aquí, pero no son compatibles con todos los navegadores". Entonces estás equivocado sobre eso. –
Digo usar todas las características de HTTP, los navegadores se condenados, jajaja. Tal vez inspire un uso más completo y adecuado del protocolo HTTP en el futuro. Hay más cosas en la red que solo POST y GET. Acerca de las implementaciones del navegador de tiempo refleja esto.
Jaja, lo deseo. Lamentablemente, no creo que hacer que mi aplicación web * no funcione * hará cualquier cosa además de enfadar a mis usuarios. :) –
hmmm ... sí, supongo que tienes un punto. oh bien, fue un pensamiento agradable. – codemonkey
pero espera ... funciona para Microsoft ... – codemonkey
Personalmente, realmente no veo ningún propósito para usar PUT o DELETE en una aplicación web. Todas las operaciones que realiza una aplicación son de lectura o escritura, también conocida como salida de entrada. ¿Por qué necesita distinguir la naturaleza de la operación en el encabezado de la solicitud HTTP? Podría hacer llamadas ajax con la misma URL de form/object/object_id y realizar varias operaciones como eliminar, actualizar, obtener el valor o crear. Con solo mirar la URL, no tengo idea de cuál es. Mediante el uso de GET y POST solamente, mis URL será:
/objeto/id/delete
/objeto/id/crear
/objeto/id/actualización
/objeto/id - GET> implícita
etc.
Con base en mi experiencia limitada, esto es mucho más limpio que los tipos de peticiones de cabecera ocultos en muchos casos. No estoy diciendo que uno nunca deba usar PUT o DELETE, solo decir, úselas solo si es absolutamente necesario.
Consulte "API web RESTful" por Leonard Richardson para obtener más información sobre diferentes casos de uso y convenciones con respecto a los métodos de solicitud HTTP en una API web REST.
- 1. ¿Hay alguna razón para usar System.Uri?
- 2. ¿Hay alguna razón para usar esto->
- 3. ¿Alguna razón importante para no usar AJAX?
- 4. CORS soporte para PUT y DELETE con ASP.NET Web API
- 5. ¿Hay alguna razón negativa para usar una solución N-Tier?
- 6. ¿Hay alguna razón para no usar AssertionHelper con NUnit?
- 7. ¿Hay alguna razón para no usar "esto" ("Self", "Me", ...)?
- 8. ¿Hay alguna razón para no usar las propiedades 'protegidas'?
- 9. ¿Alguna vez hay una buena razón para usar eval()?
- 10. ¿Alguna vez hay una buena razón para usar Insertion Sort?
- 11. ¿Hay alguna razón para no mostrar contenido https en una página servida en http?
- 12. ¿Alguna razón para no usar XmlSerializer?
- 13. RESTful PUT y DELETE y firewalls
- 14. ¿Hay alguna buena razón para usar Websockets fuera del navegador?
- 15. ¿Por qué usar HTTP PUT y DELETE métodos en lugar de POST?
- 16. ¿Hay alguna razón para lanzar una DivideByZeroException?
- 17. ¿Hay alguna razón para usar propiedades privadas en C#?
- 18. ¿Hay alguna razón para usar Object.create() o new en JavaScript?
- 19. ¿Hay alguna razón para no usar los tipos de aplicación de la unidad?
- 20. ¿Hay alguna razón para usar SGML en lugar de XML?
- 21. Sinatra y HTTP PUT
- 22. ¿Hay alguna razón para usar clases en Python si solo hay una clase en el programa?
- 23. ¿Está PUT/DELETE idempotent con REST automatic?
- 24. ASP.NET Manejar verbos PUT/DELETE
- 25. ¿Hay alguna razón para poner Google Analytics en la cabeza y no en el cuerpo?
- 26. ¿Cómo consumir REST en C# incluyendo PUT, POST y DELETE?
- 27. ¿Hay alguna razón para no usar UTF-8, 16, etc. para todo?
- 28. ¿Cómo puedo emular PUT/DELETE para Rails y GWT?
- 29. ¿Por qué mi software de servidor web no permite solicitudes PUT y DELETE?
- 30. ¿Hay alguna razón para usar enum para definir una sola constante en el código C++?
¿Adivina qué? en la última versión (19 de octubre de 2010), el soporte PUT/DELETE en HTML5 parece eliminarse. http://www.w3.org/TR/html5/forms.html#form-submission-0 –
@Xie: hallazgo interesante. Me parece contraproducente ... –