Je reçois l'erreur suivante sur quelques navigateurs Chrome mais pas tous. Je ne sais pas exactement quel est le problème à ce stade.
Le chargement de la police d'origine « https://ABCDEFG.cloudfront.net » a été bloqué par la politique de partage de ressources inter-origines: aucun en-tête «Access-Control-Allow-Origin» n'est présent sur la ressource demandée. L' accès à l' origine ' https://sub.domain.com ' n'est donc pas autorisé.
J'ai la configuration CORS suivante sur S3
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
La demande
Remote Address:1.2.3.4:443
Request URL:https://abcdefg.cloudfront.net/folder/path/icons-f10eba064933db447695cf85b06f7df3.woff
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Host:abcdefg.cloudfront.net
Origin:https://sub.domain.com
Pragma:no-cache
Referer:https://abcdefg.cloudfront.net/folder/path/icons-e283e9c896b17f5fb5717f7c9f6b05eb.css
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.94 Safari/537.36
Toutes les autres demandes de Cloudfront / S3 fonctionnent correctement, y compris les fichiers JS.
amazon-web-services
amazon-s3
cors
amazon-cloudfront
Dallas Clark
la source
la source
Réponses:
Ajoutez cette règle à votre .htaccess
mieux encore, comme suggéré par @david thomas, vous pouvez utiliser une valeur de domaine spécifique, par exemple
la source
Header set Access-Control-Allow-Origin "*"
? MerciAccess-Control-Allow-Origin "*"
fait de noter est potentiellement non sécurisé car cela ouvre le domaine à un accès javascript à partir de n'importe quel domaine. Vous devriez utiliser une valeur de domaine spécifique à la place, par exempleAccess-Control-Allow-Origin "http://example1.com"
Voir aussi stackoverflow.com/a/10636765/583715 pour une bonne explication.Chrome depuis ~ septembre / octobre 2014 soumet les polices aux mêmes vérifications CORS que Firefox a effectuées https://code.google.com/p/chromium/issues/detail?id=286681 . Il y a une discussion à ce sujet dans https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw
Étant donné que pour les polices, le navigateur peut effectuer une vérification en amont , votre stratégie S3 a également besoin de l'en-tête de demande cors . Vous pouvez vérifier votre page dans Safari (qui actuellement ne vérifie pas CORS pour les polices) et Firefox (qui le fait) pour vérifier que c'est le problème décrit.
Consultez la réponse sur le débordement de pile sur Amazon S3 CORS (partage de ressources inter-origines) et le chargement de polices inter-domaines Firefox pour les détails Amazon S3 CORS.
NB en général, car cela ne s'appliquait qu'à Firefox, il peut donc être utile de rechercher Firefox plutôt que Chrome.
la source
J'ai pu résoudre le problème en ajoutant simplement
<AllowedMethod>HEAD</AllowedMethod>
à la politique CORS du seau S3.Exemple:
la source
<AllowedMethod>HEAD</AllowedMethod>
à ma politique CORS sur le seau et cela ne fonctionne toujours pas.Nginx:
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
la source
Le 26 juin 2014, AWS a publié le comportement approprié de Vary: Origin sur CloudFront.
Définissez une configuration CORS pour votre compartiment S3:
Dans CloudFront -> Distribution -> Comportements pour cette origine, utilisez l'option Forward Headers: Whitelist et mettez en liste blanche l'en-tête 'Origin'.
Attendez environ 20 minutes pendant que CloudFront propage la nouvelle règle
Maintenant, votre distribution CloudFront doit mettre en cache différentes réponses (avec les en-têtes CORS appropriés) pour différents en-têtes Origin du client.
la source
La seule chose qui a fonctionné pour moi (probablement parce que j'avais des incohérences avec l'utilisation de www.):
Collez-le dans votre fichier .htaccess:
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
la source
J'ai eu ce même problème et ce lien m'a fourni la solution:
http://www.holovaty.com/writing/cors-ie-cloudfront/
La version courte de celui-ci est:
Remarque: Ceci est déjà fait dans la question d'origine
Remarque: le code fourni n'est pas très sécurisé, plus d'informations dans la page liée.
Votre distribution cloudfront sera mise à jour, ce qui prend environ 10 minutes. Après cela, tout devrait bien se passer, vous pouvez vérifier en vérifiant que les messages d'erreur liés à CORS ont disparu du navigateur.
la source
Pour ceux qui utilisent des produits Microsoft avec un fichier web.config:
Fusionnez ceci avec votre web.config.
Si vous n'êtes pas autorisé à modifier web.config, ajoutez cette ligne dans votre code côté serveur.
la source
Il y a un bel article ici .
Configurer cela dans nginx / apache est une erreur.
Si vous utilisez une société d'hébergement, vous ne pouvez pas configurer la périphérie.
Si vous utilisez Docker, l'application doit être autonome.
Notez que certains exemples utilisent
connectHandlers
mais cela ne définit que les en-têtes sur le document. L'utilisationrawConnectHandlers
s'applique à tous les actifs servis (polices / css / etc).Ce serait le bon moment pour examiner la politique du navigateur comme le cadrage, etc.
la source
Ajoutez simplement l'utilisation de l'origine dans votre si vous utilisez node.js comme serveur ...
la source
La solution de travail pour heroku est ici http://kennethjiang.blogspot.com/2014/07/set-up-cors-in-cloudfront-for-custom.html (les citations suivent):
Vous trouverez ci-dessous exactement ce que vous pouvez faire si vous exécutez votre application Rails dans Heroku et que vous utilisez Cloudfront comme CDN. Il a été testé sur Ruby 2.1 + Rails 4, pile Heroku Cedar.
Ajouter des en-têtes HTTP CORS (Access-Control- *) aux actifs de police
font_assets
à Gemfile.bundle install
config.font_assets.origin = '*'
àconfig/application.rb
. Si vous voulez un contrôle plus granulaire, vous pouvez ajouter différentes valeurs d'origine à différents environnements, par exemple,config/config/environments/production.rb
curl -I http://localhost:3000/assets/your-custom-font.ttf
Configurer Cloudfront pour transférer les en-têtes HTTP CORS
Dans Cloudfront, sélectionnez votre distribution, sous l'onglet «comportement», sélectionnez et modifiez l'entrée qui contrôle la livraison de vos polices (pour la plupart des applications Rails simples, vous n'avez qu'une seule entrée ici). Changez les en- têtes de transfert de «Aucun» à «Whilelist». Et ajoutez les en-têtes suivants à la liste blanche:
Enregistrez-le et c'est tout!
Attention: j'ai trouvé que parfois Firefox ne rafraîchissait pas les polices même si l'erreur CORS avait disparu. Dans ce cas, continuez à rafraîchir la page plusieurs fois pour convaincre Firefox que vous êtes vraiment déterminé.
la source