maximum headers control cache allow age http http-headers cors same-origin-policy access-control

http - headers - CORS Access-Control-Max-Age se ignora



cache control no cache no store (3)

Estoy alojando una aplicación web y su API en diferentes dominios y uso CORS para poder trabajar en torno a la misma política de origen. Hasta ahora tan bueno. Esto funciona.

Para enviar solo una verificación previa de CORS una vez por sesión, configuro Access-Control-Max-Age en 20 días, pero esto no funciona (probado en Chrome): https://db.tt/vfIW3fD2

¿Qué tengo que cambiar?


Chrome / Blink impone un tiempo máximo de verificación previa de 10 minutos (600 segundos). Aquí está la ubicación en el código fuente que define esto:

https://chromium.googlesource.com/chromium/blink/+/master/Source/core/loader/CrossOriginPreflightResultCache.cpp#40

Cualquier tiempo de verificación previa de más de 10 minutos se ignorará, y en su lugar se utilizarán 10 minutos.

Diferentes navegadores pueden tener diferentes políticas de edad máxima. Safari / WebKit almacena en caché hasta 5 minutos, mientras que Firefox almacena en caché hasta 24 horas. El código fuente de Chrome indica que existe el valor máximo para "minimizar el riesgo de usar un caché envenenado después de cambiar a una red segura".

Si el código no puede analizar el encabezado de edad máxima (o el servidor no especifica un encabezado de edad máxima), el navegador toma como valor predeterminado 5 segundos.


No confiaría demasiado en el almacenamiento en caché antes del vuelo.

De la especificación:

Los agentes de usuario pueden borrar las entradas de la caché antes de que haya pasado el tiempo especificado en el campo de edad máxima.

Además, tenga en cuenta lo siguiente, (de la especificación CORS):

Hay una coincidencia de caché cuando hay una entrada de caché en la caché de resultados de verificación previa para la que se cumple lo siguiente:

El valor del campo de origen es una coincidencia que distingue entre mayúsculas y minúsculas para el origen de origen.

El valor del campo url es una coincidencia entre mayúsculas y minúsculas para la URL de solicitud.

El valor del campo de credenciales es verdadero y la marca de omitir credenciales no está establecida, o es falsa y el indicador de omitir credenciales está establecido.

Su captura de pantalla no proporciona una manera de determinar si alguno de los anteriores es cierto.


Si está utilizando Chrome Dev Tools, asegúrese de que la opción "Deshabilitar caché (mientras DevTools está abierto)" no está marcada . Estaba teniendo problemas con el "Access-Control-Max-Age" que no estaba siendo honrado solo para darme cuenta de que tenía esa opción activada.