Header Access-Control-Allow-Origin

El header ACAO es un componente crucial de la política CORS. Es usado por los servidores para indicar si los recursos de una web pueden ser accedidos por una página con distinto origen. Este header es parte de la respuesta HTTP dada por el servidor.

Cuando un navegador hace una petición cross-origin, esta incluye el origen de la petición. El servidor comprueba que este origen sea permitido por la política CORS. Si es permitido, el servidor incluye el header Access-Control-Allow-Origin en la respuesta, especificando el origen permitido o *, que implica que cualquier origen es permitido.


Configuraciones ACAO

  1. Single Origin:
    • Configuración: Access-Control-Allow-Origin: https://example.com
    • Implicación: Sólo peticiones originarias de https://example.com son permitidas.
  2. Multiple Origins:
    • Configuración: Configurado dinámicamente basado en una lista de orígenes permitidos.
    • Implicación: Permite peticiones de un conjunto específico de orígenes.
  3. Wildcard Origin:
    • Configuración: Access-Controll-Allow-Origin: *
    • Implicación: Permite peticiones de cualquier origen. Es la configuración menos segura.
  4. With Credentials:
    • Configuración: Access-Control-Allow-Origin configurado a un origen específico (wildcard no permitido), junto con Access-Control-Allow-Credentials: true.
    • Implicación: Permite mandar credenciales, como cookies en las peticiones cross-origin. Sin embargo, es importante tener en cuenta que los navegadores mandarán las cookies sin el header Access-Control-Allow Credentials para peticiones simples como algunas peticiones GET y POST. Para peticiones preflight que usan otros métodos que no sean GET/POST o headers personalizados, el header Access-Control-Allow-Credentials debe ser true para que el navegador mande credenciales.

Flow ACAO

ACAO in depth

La tabla de flujo de arriba muestra un proceso del lado del servidor simplificado para determinar el header Access-Control-Allow-Origin. Inicialmente, comprueba si la petición HTTP contiene un origen. Si no, lo configura como wildcard (*). Si un origen está presente, el servidor comprueba si el origen está en la lista de orígenes permitidos. Si lo está el servidor configura el header ACAO para ese origen específico. Si no, no lo configura, denegando así el acceso.