HTTP tiene diferentes verbos , que tienen diferentes semánticas:
- GET: no cambia nada del lado del servidor, varios GET con los mismos parámetros deberían obtener la misma respuesta; generalmente, se obtiene un valor de cuenta
- POST: puede realizar cambios en el servidor, múltiples POST con los mismos parámetros pueden llevar a resultados y respuestas diferentes; por lo general, se agrega una cantidad a una cuenta
- PUT: puede realizar cambios en el lado del servidor, múltiples PUT con los mismos parámetros deberían conducir al mismo resultado y respuesta, generalmente establecen un valor de cuenta
BORRAR y CABEZA también existen, pero no creo que quieras usarlos aquí.
Como POST no es idempotente, el navegador principal le avisará si envía dos veces la misma solicitud POST que no es deseable en los casos de uso de GET .
De todos modos, encabezados en la solicitud HTTP controla dónde se debe almacenar o no la respuesta en la memoria caché, por lo que es posible solicitar cachés para no mantener las respuestas a las solicitudes GET.
Finalmente, el almacenamiento en caché (en el sentido de los servidores proxy de almacenamiento en caché) no está relacionado con la seguridad. Si no desea que alguien escuche sus solicitudes y respuestas, no debe preocuparse por el almacenamiento en caché, sino usar HTTPS, que garantiza que todo esté correctamente encriptado.
El almacenamiento en caché del navegador es una pregunta diferente, porque entonces puede almacenar las últimas URL en su caché de historial. Por lo tanto, la información confidencial no debe enviarse en la URL , a menos que limpie constantemente el historial cuando cierre su navegador y cierre su navegador cuando haya terminado de navegar por un sitio. Pero el envío en la URL y el envío en una solicitud GET son preguntas diferentes. La autenticación básica HTTP permite pasar las credenciales en los encabezados HTTP de una solicitud GET, lo cual es seguro. Y la autenticación del formulario de inicio de sesión es una solicitud no idempotente (el estado posterior y anterior a la autenticación no es el mismo), por lo que será una solicitud POST por semántica HTTP.
TL / DR: el problema no está en la solicitud GET vs POST. Las reglas de confidencialidad son:
- siempre use HTTPS
- nunca pase datos confidenciales en la URL.