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

StackOverflow https://stackoverflow.com/questions/165779

Pregunta

He visto un par de preguntas por aquí como Cómo depurar servicios RESTful, 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 enviar PUT y DELETE Las solicitudes funcionan como se esperaba: el XMLHttpRequest se completa 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 limitaciones no obvias?

¿Fue útil?

Solución

No. La especificación HTML 5 menciona:

  

Los atributos de contenido de método y método de método son atributos enumerados   con las siguientes palabras clave y estados:

     

La palabra clave get , que se asigna al estado GET, que indica el HTTP GET   método. El método GET solo debe solicitar y recuperar datos y   no debería tener otro efecto.

     

La palabra clave publicación , que se asigna al estado   POST, que indica el método HTTP POST. El método POST solicita que   el servidor acepta que se procesen los datos del formulario enviado, lo que puede   resultar en un elemento que se agrega a una base de datos, la creación de una nueva web   recurso de página, la actualización de la página existente o todas las   resultados mencionados.

     

La palabra clave diálogo , que se asigna al diálogo de estado, lo que indica que   el envío del formulario está destinado a cerrar el cuadro de diálogo en el que   el formulario se encuentra, si lo hay, y de lo contrario no se envía.

     

El valor predeterminado no válido para estos atributos es el estado GET

I.e. Los formularios HTML 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 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).

Otros consejos

Los formularios HTML admiten GET y POST. (HTML5 en un momento agregó PUT / DELETE, pero se eliminaron).

XMLHttpRequest admite todos los métodos, incluido CHICKEN, aunque algunos nombres de métodos no coinciden 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, CONNECT).

Los navegadores convergen lentamente en las reglas especificadas por XMLHttpRequest, pero como el otro comentario señaló, todavía hay algunas diferencias.

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 toma el método HTTP como argumento, y se especifica que acepta cualquier método HTTP válido (consulte el elemento número 5 del enlace), incluido 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:"OBTENER", "POST", "HEAD", "PONER", "BORRAR", "MOVER", "PROPFIND", "PROPPATCH", "MKCOL", "COPIAR", "BLOQUEAR", "DESBLOQUEAR" y " OPCIONES".

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

ACTUALIZAR:Para aclarar, no quise decir (aunque sí escribí) que escribió XMLHttpRequest;Quise decir que escribiste el código que usa XMLHttpRequest.Los navegadores no soportan de forma nativa XMLHttpRequest. XMLHttpRequest proviene del tiempo de ejecución de JavaScript, que puede estar alojado en un navegador, aunque no es necesario que lo esté (consulte Rinoceronte).Por eso la gente dice que los navegadores no soportan PUT y DELETE—Porque en realidad es JavaScript el que los admite.

_method solución de campo oculto

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

  • agrega un parámetro oculto form_tag 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 auxiliar de creación HTML (por ejemplo, Rails <form method="post")

  • corrige el método de formulario real para POST (<=>)

  • procesa <=> en el servidor y hace exactamente como si ese método hubiera sido enviado en lugar de la 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

, 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 admite 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 (julio '15), pero Opera Mini carece de soporte para todo. :)

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top