Los navegadores web utilizan el intercambio de recursos entre orígenes (CORS) para gestionar las peticiones realizadas a un dominio distinto del que sirve la página web. Es un mecanismo de seguridad para mitigar los riesgos de falsificación de peticiones entre sitios y otros ataques entre sitios.

Para tener una idea clara de cómo funciona, vamos a desglosar el flujo de trabajo CORS:

1) Inicio de una solicitud desde una página web
El proceso comienza con una página web (origen A) que intenta acceder a un recurso de un origen diferente (origen B).

2) Comprobación de solicitud “simple” o “no simple
Antes de iniciar la solicitud propiamente dicha, el navegador comprueba si ésta es “simple” o “no simple”. Una solicitud “simple” suele incluir métodos como GET, POST o HEAD y un conjunto limitado de cabeceras. Si la solicitud es “no simple”, el navegador inicia una solicitud de verificación previa.

3) Solicitud de comprobación previa (para solicitudes no simples)
Después de que el navegador haya completado su comprobación de peticiones “no simples”, si la petición es “no simple”, enviará una petición OPTIONS al origen de destino (origen B). Las cabeceras incluidas proporcionarán detalles de la solicitud real que desea realizar.

4) Respuesta del servidor a la solicitud de verificación previa
Una vez que el servidor (origen B) recibe la solicitud de verificación previa, envía una respuesta. Si el servidor decide que el origen tiene permiso para acceder al recurso, responderá con un conjunto de cabeceras que así lo estipulan. El navegador rechazará la solicitud real si el servidor no proporciona las cabeceras correctas o si éstas no coinciden con los detalles de la propia solicitud.

5) Envío de la solicitud real
Ahora que la solicitud de comprobación previa ya se ha realizado (con éxito o no), el navegador puede realizar la solicitud real al origen B. La solicitud incluirá todas las cabeceras, credenciales o datos necesarios.

6) Respuesta del servidor a la solicitud real
Una vez que el servidor (origen B) recibe la solicitud, la procesa y envía una respuesta. Junto con la respuesta, el servidor enviará las cabeceras CORS correspondientes.

7) Aplicación del navegador
Por último, pero no por ello menos importante, el navegador comprobará las cabeceras CORS de la respuesta una última vez. Si todo es correcto, el navegador proporciona la respuesta al JavaScript de la página web. Si no, el navegador bloqueará el acceso a la respuesta y registrará un error CORS en la consola.

CORS garantiza que los servidores tengan control sobre quién puede acceder a sus recursos. Los navegadores aplican estas reglas para proteger a los usuarios de posibles amenazas a la seguridad. Aunque CORS introduce una capa adicional de complejidad, constituye una medida de seguridad eficaz para garantizar un intercambio seguro de datos entre orígenes.