Pregunta ¿Los métodos PUT, DELETE, HEAD, etc. están disponibles en la mayoría de los navegadores web?


He visto un par de preguntas por aquí como Cómo depurar servicios RESTful, que menciona:

Lamentablemente, ese mismo navegador no me permitirá probar HTTP PUT, DELETE y, hasta cierto punto, incluso HTTP POST.

También escuché que los navegadores solo admiten GET y POST, de otras fuentes como:

Sin embargo, algunas pruebas rápidas en Firefox muestran que el envío PUT y DELETE solicitudes funciona como se esperaba - el XMLHttpRequest finaliza con éxito, y la solicitud aparece en los registros del servidor con el método correcto. ¿Hay algún aspecto que me falta, como la compatibilidad entre navegadores o las limitaciones no obvias?


568
2017-10-03 05:26


origen


Respuestas:


Los formularios HTML (hasta HTML versión 4 y XHTML 1) solo admiten OBTENER y ENVIAR como métodos de solicitud HTTP. Una solución para esto es hacer un túnel de otros métodos a través de POST utilizando un campo de formulario oculto que el servidor lee y la solicitud se envía en consecuencia.

Sin embargo, OBTENER, ENVIAR, PONER y BORRAR  son soportado por las implementaciones de XMLHttpRequest (es decir, llamadas AJAX) en todos los principales navegadores web (IE, Firefox, Safari, Chrome, Opera).


432
2017-10-03 12:02



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 se comparan 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 señaló el otro comentario, aún existen algunas diferencias.


74
2017-10-03 09:59



XMLHttpRequest es un objeto estándar en el modelo de objetos de JavaScript.

De acuerdo con 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.

los open() método en el objeto toma el Método HTTP como argumento, y se especifica que toma cualquier método HTTP válido (ver el número de artículo 5 del enlace), que incluye GET, POST, HEAD, PUT y DELETE, como especificado por 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", "COPY" , "LOCK", "UNLOCK" y "OPTIONS".


40
2017-10-03 09:49



Creo que esos comentarios se refieren específicamente a los navegadores, es decir, al hacer clic en enlaces y enviar formularios, no XMLHttpRequest. XMLHttpRequest es solo un cliente personalizado que  escribió en JavaScript que usa el navegador como tiempo de ejecución.

ACTUALIZACIÓN: Para aclarar, no quise decir (aunque sí escribí) que escribió XMLHttpRequest; Quise decir que escribiste el código que usa XMLHttpRequest. Los navegadores no son compatibles de forma nativa XMLHttpRequest. XMLHttpRequest proviene del tiempo de ejecución de JavaScript, que puede estar alojado en un navegador, aunque no es obligatorio (consulte Rinoceronte) Es por eso que la gente dice que los navegadores no son compatibles PUT y DELETE-Porque en realidad es JavaScript que los está apoyando.


15
2017-11-12 21:49



_method solución de campo oculto

Utilizado en Rails y podría adaptarse a cualquier marco:

  • agregar un escondido _method parámetro a cualquier forma que no sea GET o POST:

    <input type="hidden" name="_method" value="DELETE">
    

    Esto se puede hacer automáticamente en frameworks a través del método HTML creation helper (por ejemplo, Rails form_tag)

  • arregla el método de forma real a POST (<form method="post")

  • procesos _method en el servidor y hacer exactamente como si ese método hubiera sido enviado en lugar del POST real

Justificación / historia de por qué no es posible: https://softwareengineering.stackexchange.com/questions/114156/why-there-are-no-put-and-delete-methods-in-html-forms


13
2017-07-31 14:39



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 tengo más para probar. Safari 4 definitivamente admite PUT y DELETE.


8
2017-07-21 20:52



, PUT, DELETE, HEAD etc. Los métodos HTTP están disponibles en todos los navegadores modernos.

Para cumplir con XMLHttpRequest Nivel 2 navegadores debe apoyar estos métodos. Para verificar qué navegadores son compatibles con XMLHttpRequest Level 2, recomiendo CanIUse:

http://caniuse.com/#feat=xhr2

Solo a Opera Mini le falta soporte ATM (juli '15), pero Opera Mini carece de soporte para todo. :)


7