He visto un par de preguntas por aquí, como Cómo depurar servicios RESTful , que menciona:
Desafortunadamente, ese mismo navegador no me permitirá probar HTTP PUT, DELETE y, hasta cierto punto, incluso HTTP POST.
También he oído que los navegadores solo admiten GET y POST, de algunas otras fuentes como:
- http://www.packetizer.com/ws/rest.html
- http://www.mail-archive.com/[email protected]/msg13518.html
- http://www.xml.com/cs/user/view/cs_msg/1098
Sin embargo, algunas pruebas rápidas en Firefox muestran que el envío PUT
y las DELETE
solicitudes funcionan como se esperaba: se XMLHttpRequest
completa con éxito y la solicitud se muestra en los registros del servidor con el método correcto. ¿Hay algún aspecto que me falta, como la compatibilidad entre navegadores o limitaciones no obvias?
http
cross-browser
browser
ajax
John Millikin
fuente
fuente
Respuestas:
No. La especificación HTML 5 menciona:
Es decir, los formularios HTML solo admiten GET y POST como métodos de solicitud HTTP. Una solución alternativa para esto es hacer un túnel de otros métodos a través de POST mediante el uso de un campo de formulario oculto que es leído por el servidor y la solicitud se despacha en consecuencia.
Sin embargo, GET , POST , PUT y DELETE son compatibles con las implementaciones de XMLHttpRequest (es decir, llamadas AJAX) en todos los principales navegadores web (IE, Firefox, Safari, Chrome, Opera).
fuente
Los formularios HTML admiten GET y POST. (HTML5 en un punto agregó PUT / DELETE, pero se eliminaron).
XMLHttpRequest admite todos los métodos, incluido CHICKEN, aunque algunos nombres de métodos no coinciden entre mayúsculas y minúsculas (los métodos distinguen entre mayúsculas y minúsculas por HTTP) y algunos nombres de métodos no son compatibles en absoluto por razones de seguridad (por ejemplo, CONNECT).
Los navegadores convergen lentamente en las reglas especificadas por XMLHttpRequest, pero como el otro comentario señaló, todavía hay algunas diferencias.
fuente
XMLHttpRequest
es un objeto estándar en el modelo de objetos JavaScript.Según Wikipedia,
XMLHttpRequest
apareció por primera vez en Internet Explorer 5 como un objeto ActiveX, pero desde entonces se ha convertido en un estándar y se ha incluido para su uso en JavaScript en la familia Mozilla desde 1.0, Apple Safari 1.2, Opera 7.60-p1 e IE 7.0 .El
open()
método en el objeto realiza el método HTTP como un argumento - y se especifica como de tomar cualquier método HTTP válida (véase el número de artículo 5 del enlace) - incluyendoGET
,POST
,HEAD
,PUT
yDELETE
, como se especifica en RFC 2616 .Como nota al margen, IE 7–8 solo permite los siguientes métodos HTTP: "GET", "POST", "HEAD", "PUT", "DELETE", "MOVE", "PROPFIND", "PROPPATCH", "MKCOL" , "COPIAR", "BLOQUEAR", "DESBLOQUEAR" y "OPCIONES" .
fuente
_method
solución de campo ocultoUtilizado en Rails y podría adaptarse a cualquier marco:
agregue un
_method
parámetro oculto a cualquier formulario que no sea GET o POST:Esto se puede hacer automáticamente en marcos a través del método auxiliar de creación de HTML (por ejemplo, Rails
form_tag
)arregle el método de formulario real a POST (
<form method="post"
)procesa
_method
en el servidor y hace exactamente como si ese método hubiera sido enviado en lugar de la POST realJustificación / historia de por qué no es posible: /software/114156/why-there-are-no-put-and-delete-methods-in-html-forms
fuente
Creo que esos comentarios se refieren específicamente a los navegadores, es decir, hacer clic en los enlaces y enviar formularios, no
XMLHttpRequest
.XMLHttpRequest
es sólo un cliente personalizado que se ha escrito en JavaScript que utiliza el navegador como un tiempo de ejecución.ACTUALIZACIÓN: Para aclarar, no quise decir (aunque escribí) que usted escribió
XMLHttpRequest
; Quise decir que escribiste el código que usaXMLHttpRequest
. Los navegadores no son compatibles de forma nativaXMLHttpRequest
.XMLHttpRequest
proviene del tiempo de ejecución de JavaScript, que puede ser alojado por un navegador, aunque no es obligatorio (ver Rhino ). Es por eso que la gente dice que los navegadores no son compatiblesPUT
y,DELETE
porque en realidad es JavaScript el que los admite.fuente
it's actually JavaScript that is supporting them
. No es realmente cierto.XMLHttpRequest
es un 'host-objeto', lo que significa que es un objeto que expone la funcionalidad del host al código Javascript. No es parte de JS en sí.YES , PUT, DELETE, HEAD, etc. Los métodos HTTP están disponibles en todos los navegadores modernos.
Para cumplir con XMLHttpRequest Level 2, los navegadores deben admitir estos métodos. Para verificar qué navegadores son compatibles con XMLHttpRequest Level 2, recomiendo CanIUse:
http://caniuse.com/#feat=xhr2
Solo Opera Mini carece de cajero automático de soporte (juli '15), pero Opera Mini carece de soporte para todo. :)
fuente
Solo para agregar: Safari 2 y versiones anteriores definitivamente no admitían PUT y DELETE. Me da la impresión de que 3 sí, pero ya no lo tengo para probar. Safari 4 definitivamente admite PUT y DELETE.
fuente