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




from javascript (7)

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

Desafortunadamente, ese mismo navegador no me permite 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 de solicitudes PUT y DELETE funciona como se esperaba: el XMLHttpRequest completa con éxito, y la solicitud se muestra en los registros del servidor con el método correcto. ¿Falta algún aspecto de esto, como la compatibilidad entre navegadores o las limitaciones no obvias?


Answers

_method solución de campo oculto

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

  • agregue un parámetro _method oculto a cualquier formulario que no sea GET o POST:

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

    Esto se puede hacer automáticamente en marcos a través del método de ayuda de creación de HTML (por ejemplo, Rails form_tag )

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

  • procesa el _method en el servidor y hace exactamente como si ese método se hubiera 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


Los formularios HTML (hasta la versión 4 de HTML y XHTML 1) solo admiten GET y POST 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 mediante el uso de un campo de formulario oculto que es leído por el servidor y la solicitud se envía 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).


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

Para ser compatible con XMLHttpRequest, los navegadores de nivel 2 deben ser compatibles con estos métodos. Para verificar qué navegadores son compatibles con XMLHttpRequest Nivel 2, recomiendo CanIUse:

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

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


Solo para agregar: Safari 2 y versiones anteriores definitivamente no son compatibles con PUT y DELETE. Me da la impresión de 3, pero ya no la tengo para probar. Safari 4 definitivamente soporta PUT y DELETE.


XMLHttpRequest es un objeto estándar en el modelo de objetos de 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 método open() en el objeto toma el método HTTP como un argumento, y se especifica que toma cualquier método HTTP válido (consulte el artículo número 5 del enlace), incluidos GET , POST , HEAD , PUT y DELETE , según lo 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" , "COPIAR", "BLOQUEAR", "DESBLOQUEO" y "OPCIONES" .


Los formularios HTML soportan 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 con 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, CONECTAR).

Los navegadores están convergiendo lentamente en las reglas especificadas por XMLHttpRequest, pero como el otro comentario señalado todavía hay algunas diferencias.


prueba estos también si solo autocomplete="off" no funciona:

autocorrect="off" autocapitalize="off" autocomplete="off"




http cross-browser browser ajax