いくつかのChromeブラウザで以下のエラーが表示されますが、全部ではありません。現時点で何が問題なのか完全にはわからない。
Originからのフォント ' https://ABCDEFG.cloudfront.net 'は、クロスオリジンリソース共有ポリシーによって読み込みがブロックされています。オリジン ' https://sub.domain.com 'はアクセスを許可されていません。
S3に次のCORS設定があります。
<CORSConfiguration>
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedHeader>*</AllowedHeader>
<AllowedMethod>GET</AllowedMethod>
</CORSRule>
</CORSConfiguration>
リクエスト
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
JSファイルを含め、Cloudfront/S3からの他のすべての要求は正しく機能します。
このルールをあなたの .htaccess に追加してください
Header add Access-Control-Allow-Origin "*"
さらに良いことに、@ David thomasによって示唆されているように、特定のドメイン値を使うことができます。
Header add Access-Control-Allow-Origin "your-domain.com"
2014年9月から10月までのChromeは、Firefoxが行ったのと同じCORSチェックの対象となるフォントを作成します https://code.google.com/p/chromium/issues/detail?id=286681 。これについては https://groups.google.com/a/chromium.org/forum/?fromgroups=#!topic/blink-dev/TT9D5-Zfnzw に議論があります。
フォントの場合、ブラウザは プリフライトチェック を行うことができるので、S3ポリシーでは corsリクエストヘッダも必要です 。あなたは、Safari(現時点ではCORSがフォントをチェックしない)やFirefox(それができる)でページをチェックすることができます。これを説明する問題です。
Amazon S3 CORSの詳細については、 Amazon S3 CORS(クロスオリジンリソース共有)およびFirefoxのクロスドメインフォントロード のスタックオーバーフローの回答を参照してください。
一般的にNBは、これはFirefoxにのみ適用されていたため、ChromeではなくFirefoxを検索するのに役立つ可能性があります。
S3バケットのCORSポリシーに<AllowedMethod>HEAD</AllowedMethod>
を追加するだけで問題を解決できました。
例:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>HEAD</AllowedMethod>
<MaxAgeSeconds>3000</MaxAgeSeconds>
<AllowedHeader>Authorization</AllowedHeader>
</CORSRule>
</CORSConfiguration>
Nginx:
location ~* \.(eot|ttf|woff)$ {
add_header Access-Control-Allow-Origin '*';
}
AWS S3:
http://schock.net/articles/2013/07/03/hosting-web-fonts-on-a-cdn-youre-going-to-need-some-cors/
2014年6月26日、AWSはCloudFrontで適切なVary:Originの動作をリリースしました
S3バケットのCORS設定を設定します。
<AllowedOrigin>*</AllowedOrigin>
CloudFront - > Distribution - >このOriginのビヘイビアで、Forward Headers:Whitelistオプションを使用し、 'Origin'ヘッダーをホワイトリストに追加します。
CloudFrontが新しいルールを伝播するまで、20分ほど待ちます
これであなたのCloudFrontディストリビューションは異なるクライアントOriginヘッダに対して異なるレスポンスを(適切なCORSヘッダと共に)キャッシュするべきです。
私のために働いている唯一のもの(おそらく私はwww。usageと矛盾していたため):
これをあなたの.htaccessファイルに貼り付けてください。
<IfModule mod_headers.c>
<FilesMatch "\.(eot|font.css|otf|ttc|ttf|woff)$">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>
</IfModule>
<IfModule mod_mime.c>
# Web fonts
AddType application/font-woff woff
AddType application/vnd.ms-fontobject eot
# Browsers usually ignore the font MIME types and sniff the content,
# however, Chrome shows a warning if other MIME types are used for the
# following fonts.
AddType application/x-font-ttf ttc ttf
AddType font/opentype otf
# Make SVGZ fonts work on iPad:
# https://Twitter.com/FontSquirrel/status/14855840545
AddType image/svg+xml svg svgz
AddEncoding gzip svgz
</IfModule>
# rewrite www.example.com → example.com
<IfModule mod_rewrite.c>
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_Host} ^www\.(.+)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
</IfModule>
http://ce3wiki.theturninggate.net/doku.php?id=cross-domain_issues_broken_web_fonts
私はこれと同じ問題を抱えていて、このリンクは私に解決策を提供しました:
http://www.holovaty.com/writing/cors-ie-cloudfront/ /
その短いバージョンは次のとおりです。
クラウドフロントディストリビューションが更新されます。これには約10分かかります。その後、すべてうまくいっているはずです、あなたはCORS関連のエラーメッセージがブラウザから消えたことをチェックすることによって確認することができます。
Nice writeup here があります。
nginx/Apacheでこれを設定するのは誤りです。
あなたがホスティング会社を使用している場合、Edgeを設定することはできません。
Dockerを使用している場合、アプリは自己完結型でなければなりません。
いくつかの例ではconnectHandlers
を使用していますが、これはdocのヘッダを設定するだけです。 rawConnectHandlers
の使用は、提供されるすべてのアセット(fonts/css/etc)に適用されます。
// HSTS only the document - don't function over http.
// Make sure you want this as it won't go away for 30 days.
WebApp.connectHandlers.use(function(req, res, next) {
res.setHeader('Strict-Transport-Security', 'max-age=2592000; includeSubDomains'); // 2592000s / 30 days
next();
});
// CORS all assets served (fonts/etc)
WebApp.rawConnectHandlers.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
return next();
});
フレーミングなどのように ブラウザポリシー を見るのに良い時期です。
Web.configファイルでマイクロソフト製品を使用している場合
これをあなたのweb.configとマージしてください。
任意のドメインで許可するには、
value="domain"
をvalue="*"
に置き換えます。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.webserver>
<httpprotocol>
<customheaders>
<add name="Access-Control-Allow-Origin" value="domain" />
</customheaders>
</httpprotocol>
</system.webserver>
</configuration>
Web.configを編集する権限がない場合は、サーバーサイドコードにこの行を追加してください。
Response.AppendHeader("Access-Control-Allow-Origin", "domain");