¿Cuándo se aplica CORS?

1

Incluyo JavaScript de RUM (Real User Monitoring) en el sitio web de un cliente que respalda la información de rendimiento. Esperaba encontrar problemas con CORS, pero parece estar funcionando sin advertencias ni errores.

Escenario

Aplicación - sit.domainC.domainB.domainA.com

Sonda de rendimiento - probe.domainE.domainD.domainA.com

El código JS está alojado en el mismo dominio que la aplicación.

  1. Los usuarios visitan la aplicación y funcionan normalmente
  2. Javascript envía XHR a la sonda con datos de rendimiento

La página no se sirve con Access-Control-Allow-Origin, así que no estoy seguro de por qué funciona esto.

    
pregunta bcooper 27.11.2015 - 01:20
fuente

1 respuesta

2

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.

    
respondido por el rink.attendant.6 27.11.2015 - 06:11
fuente

Lea otras preguntas en las etiquetas