web-dev-qa-db-fra.com

CORS Access-Control-Max-Age est ignoré

J'héberge une WebApp et son API sur différents domaines et j'utilise CORS pour pouvoir contourner la même politique d'origine. Jusqu'ici tout va bien. Cela marche.

Pour n'envoyer un contrôle en amont CORS qu'une fois par session, j'ai défini Access-Control-Max-Age sur 20 jours, mais cela ne fonctionne pas (testé dans Chrome): https://db.tt/vfIW3fD2

Que dois-je changer?

25
Roland Schütz

Si vous utilisez Chrome Dev Tools, assurez-vous que vous avez "Désactiver le cache (alors que DevTools est ouvert)" non coché. J'avais des problèmes avec le "Contrôle d'accès" -Max-Age "n'étant pas honoré seulement pour réaliser que j'ai fait cocher cette option.

73
Nej Kutcharian

Chrome/Blink impose un temps de contrôle en amont maximum de 10 minutes (600 secondes). Voici l'emplacement dans le code source qui définit ceci:

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

Tout temps de contrôle en amont supérieur à 10 minutes sera ignoré et 10 minutes seront utilisées à la place.

Différents navigateurs peuvent avoir différentes politiques d'âge maximum. Safari/WebKit met en cache jusqu'à 5 minutes, tandis que Firefox met en cache jusqu'à 24 heures. Le code source Chrome indique que la valeur maximale existe afin de "minimiser le risque d'utiliser un cache empoisonné après le passage à un réseau sécurisé").

Si le code ne peut pas analyser l'en-tête max-age (ou si le serveur ne spécifie pas d'en-tête max-age), le navigateur prend par défaut 5 secondes.

23
monsur

Je ne compterais pas trop sur la mise en cache de contrôle en amont.

De la spécification:

Les agents utilisateurs peuvent effacer les entrées du cache avant la fin du délai spécifié dans le champ max-age.

Gardez également à l'esprit les éléments suivants (à partir de la spécification CORS):

Il existe une correspondance de cache lorsqu'il existe une entrée de cache dans le cache de résultats de contrôle en amont pour laquelle les éléments suivants sont vrais:

La valeur du champ d'origine est une correspondance sensible à la casse pour l'origine source.

La valeur du champ url est une correspondance sensible à la casse pour l'URL de la demande.

La valeur du champ d'informations d'identification est vraie et l'indicateur d'omission des informations d'identification n'est pas défini, ou elle est fausse et l'indicateur d'omission des informations d'identification est défini.

Votre capture d'écran ne permet pas de déterminer si l'une des affirmations ci-dessus est vraie.

10
Ray Nicholus