¿Por qué algunos sitios web implementan su enlace de cierre de sesión como una publicación de formulario a través de JavaScript frente a una solicitud GET antigua y simple?

De acuerdo con las convenciones REST (estilo arquitectónico de software), las solicitudes POST deben usarse donde los datos se ven afectados (creados, actualizados o destruidos). Las solicitudes GET se usan para casos en los que los datos persistentes no se ven afectados. Cerrar sesión realmente no afecta los datos, ya que podría volver a iniciar sesión con la misma facilidad, por lo que uno podría considerarlo adecuado para una solicitud GET porque no dañará a nadie si alguien engaña a otra persona para que visite http: // ejemplo .com / logout. Algunos desarrolladores utilizan solicitudes GET para cualquier cosa que no modifique datos persistentes, y solicitudes POST para las pocas solicitudes que crean, actualizan o destruyen datos.

Sin embargo, las solicitudes POST definitivamente deberían usarse para cerrar sesión, ya que podría ahorrarles a los usuarios una gran cantidad de problemas. Con una solicitud GET, cualquier otro sitio web que visite podría cerrar la sesión de cualquier sitio web que esté utilizando una solicitud GET para cerrar sesión. Simplemente agregando un iframe invisible (alto y ancho de cero) en su página con la URL de cierre de sesión cargaría la URL en su navegador sin su conocimiento, y como resultado, la próxima vez que visite ese otro sitio web, se cerrará la sesión. No es un gran problema para el usuario final, porque no perdería ninguna información, pero podría ser molesto. Quora User señala en los comentarios que esto también puede ocurrir con las solicitudes POST, pero es un poco más complicado lograr el mismo efecto (requiere un poco de JavaScript, mientras que con una solicitud GET, solo involucra una etiqueta HTML).

En teoría, una solicitud DELETE (http://www.w3.org/Protocols/rfc2…) tendría más sentido para cerrar sesión, ya que se está eliminando una sesión. El problema con las solicitudes DELETE es que los navegadores web no las admiten, por lo que algunos desarrolladores optan por respaldar las solicitudes POST para cualquier solicitud que normalmente se incluiría en una solicitud PUT o DELETE. Algunos marcos web han implementado un campo de formulario oculto especial que le dice al marco que interprete una solicitud POST específica como una solicitud PUT o DELETE.

Por las razones que Simon y Chris detallaron anteriormente, y también porque hay algunas herramientas de “Acelerador web” que seguirán a todos los enlaces de una página mientras la lee para que el siguiente clic se sienta más rápido. Si el cierre de sesión es una solicitud GET, estos aceleradores web lo cerrarán accidentalmente.

Probablemente porque si implementa el cierre de sesión como una acción GET, puedo forzarlo a cerrar sesión en un sitio engañándolo para que visite una página con un http://yoursite.com/logout/&quot ; width = “1” height = “1”> elemento en él.