2017-08-06 2 views
1

Je suis avec un comportement très étrange avec CORS à l'aide CloudFront + S3CloudFront CORS ne fonctionne que pour un sous-domaine

Quand je lance

curl -I -s -X GET -H "Origin: https://myapp.com" https://s3.amazonaws.com/myapp/assets/fontawesome-webfont.woff | grep Access 

et

curl -I -s -X GET -H "Origin: https://**www.**myapp.com" https://s3.amazonaws.com/myapp/assets/fontawesome-webfont.woff | grep Access 

renvoient toutes les deux les valeurs que attendu:

Contrôle d'accès Autoriser-O RIGINE: https://musicjungle.com.br

Access-Control-Allow-Méthodes: GET Access-Control-Expose-têtes: ETag

Access-Control-Max-Âge: 3000 Access-Control-Allow-vérification des pouvoirs: true

Variez: origine, Access-Control-Demande-en-têtes,

Access-Control-Demande-Méthode

Mais lorsque je tente d'exécuter la même boucle en utilisant l'URL CloudFront, juste le www Subdo principaux travaux

curl -I -s -X GET -H "Origin: https://www.myapp.com" https://d1bfllp5zjnl7u.cloudfront.net/assets/fontawesome-webfont.woff | grep Access 

Access-Control-Allow-origine: https://www.musicjungle.com.br

Access-Control-Allow-Méthodes: GET, PUT, POST, SUPPRIMER, HEAD

Access-Control-Max -age: 3000 Access-Control-Allow-pouvoirs: true

La commande ci-dessous ne retourne pas les en-têtes comme prévu

curl -I -s -X GET -H "Origin: https://myapp.com" https://d1bfllp5zjnl7u.cloudfront.net/assets/fontawesome-webfont.woff | grep Access 

Y a-t-il des raisons pour lesquelles cela pourrait se produire? J'ai déjà autorisé Origin pour les deux serveurs sur la configuration S3 CORS (comme nous pouvons le voir ci-dessus), mais il semble y avoir quelque chose sur la configuration de Cloudfront, qui ne permet que "www.myapp.com".

Répondre

0

Si je vous comprends bien, je dirais que c'est une question de têtes de requête de paramètres du cache de CloudFront ...

Par défaut, CloudFront ne considère pas les en-têtes lorsque la mise en cache de vos objets dans des endroits de bord . Si votre origine renvoie deux objets et qu'ils ne diffèrent que par les valeurs des en-têtes de la requête, CloudFront met en cache une seule version de l'objet.

- Source.

Alors, allez à votre distribution et modifier votre Comportement pour permettre CloudFront aux objets du cache en fonction des valeurs des Origin têtes:

CF Headers Cache Configuration

Après de nouveaux paramètres sont établis, créer un Invalidation pour les fichiers affectés.