CORS funciona al determinar si el objetivo de solicitud responde con un encabezado Access-Control-Allow-Origin
(ACAO). En este caso, el objetivo de la solicitud es la sonda de rendimiento. No importa si la página se sirve con un encabezado ACAO.
De Wikipedia :
Tenga en cuenta que en la arquitectura CORS, el servicio web externo (bar.com) establece el encabezado ACAO, no el servidor de aplicaciones web original (foo.com). CORS permite que el servicio web externo autorice a la aplicación web para utilizar sus servicios y no controla los servicios externos a los que accede la aplicación web. Para esto último, se debe usar la Política de seguridad de contenido (directiva connect-src).
Suponiendo que la política del mismo origen se implemente correctamente, un agente de usuario (navegador) que no es compatible CORS simplemente producirá un error al realizar una solicitud de origen cruzado.
Un agente de usuario que admita CORS realizará una solicitud de origen cruzado con el encabezado Origin
que contiene un valor del sitio desde donde se envía la solicitud y ocurrirá una de las siguientes situaciones:
- La respuesta no contiene un encabezado
Access-Control-Allow-Origin
. En este caso, el navegador simplemente producirá un error ya que el servidor no permite solicitudes de origen cruzado.
- La respuesta contiene un encabezado
Access-Control-Allow-Origin
con un valor de *
. En este caso, el código continuará ejecutándose ya que cualquier sitio puede realizar una solicitud de origen cruzado al servidor.
- La respuesta contiene un encabezado
Access-Control-Allow-Origin
con una lista de orígenes. En este caso, si el sitio actual está en la lista de orígenes, el código continuará ejecutándose ya que se le permite hacer una solicitud de origen cruzado al servidor. De lo contrario, se producirá un error.
Los puntos anteriores son una ligera simplificación del proceso real. Puede haber más Access-Control-*
encabezados involucrados.
Para métodos complejos (es decir, métodos no simples) hay un paso adicional involucrado conocido como verificación previa en el que se realiza una solicitud de verificación previa antes de la solicitud real.
Aquí hay un diagrama de flujo que muestra el proceso. La llamada OPCIONES representa el proceso de verificación previa.
(Imagenutilizadaconpermiso,licenciadabajoCC-BY-SA4.0porBluesmoon [fuente] )
Puede leer más sobre utilizando CORS en HTML5 Rocks. La especificación CORS también es bastante útil, aunque la redacción es técnica porque, después de todo, es la especificación.