我有一个Azure存储帐户,CDN设置为有5个子域指向存储帐户(cdn1.domain.com,cdn2.domain.com,- cdn5.domain.com)。
我使用W3全缓存插件来提高性能,特别是在Azure上托管静态文件。插件上传所有文件良好,网站可以访问图像,css,脚本等.没问题。但是,字体不加载。
获得以下错误:
来自原点的字体“http://cdn1.domain.com”已被跨源资源共享策略阻止加载:请求的资源上没有“访问控制-允许-原产地”标题。因此,“http://domain.com”源是不允许访问的。
wordpress站点托管在DigitalOcean上,在Ubuntu14.0.4上使用Apache。我在apache2.conf中添加了以下内容:
<FilesMatch ".(eot|ttf|otf|woff)">
Header set Access-Control-Allow-Origin "*"
</FilesMatch>那不起作用。经过一些研究之后,看起来Azure默认不允许CORS,所以我创建了一个C#应用程序来更改帐户上的CORS规则,如下所示:
var storageAccount =
new CloudStorageAccount(
new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials("accountname", "accountkey"), true);
var blobClient = storageAccount.CreateCloudBlobClient();
var blobServiceProperties = new ServiceProperties
{
HourMetrics = null,
MinuteMetrics = null,
Logging = null,
};
blobServiceProperties.Cors.CorsRules.Add(new CorsRule
{
AllowedHeaders = new List<string> { "*" },
AllowedMethods = CorsHttpMethods.Get,
AllowedOrigins = new List<string> { "*" },
ExposedHeaders = new List<string> { "*" },
MaxAgeInSeconds = 3600 // 30 minutes
});
blobClient.SetServiceProperties(blobServiceProperties);从根本上说,这个仓库应该对所有的来源开放.但还是会犯同样的错误。所以我想也许是某种缓存。所以我把所有的文件重新上传到同一个容器,然后等待了大约6个小时。
错误仍然存在。我觉得为了从Azure加载字体,我已经尝试了所有应该做的事情。
我错过了什么?
发布于 2014-10-02 04:14:00
对于大多数CDN的CORS,默认情况下是为访问控制-允许-原产地头设置通配符。通配符案例的工作原理是CDN将缓存它获得的第一个请求的响应。对于客户需要允许特定来源的情况,通常需要在CDN上设置额外的配置来启用该配置。现在,从Azure管理门户可以获得的Azure CDN功能中,您需要为CDN端点启用查询字符串设置,然后对每个允许域的请求使用唯一的查询字符串。启用查询字符串设置将导致CDN缓存每个唯一查询字符串的单独对象。对于Azure CDN的大客户,有一个具有更复杂功能的补充门户,但它目前只对有限数量的客户可用。
https://stackoverflow.com/questions/25989306
复制相似问题