我一直在关注启用Azure CDN for Cloud Services的本教程: link。我将我的捆绑和缩小与CDN集成,一切正常,但我的网站无法获取字体,我收到此错误:
Font from origin 'http://azurecdn.vo.msecnd.net' has been blocked from loading by Cross-Origin Resource Sharing policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http:// mysite.com' is therefore not allowed access.
我厌倦了从我的问题中找到解决方案并将这些行添加到我的Web.config文件中:
<httpProtocol>
<customHeaders>
<add name="access-control-allow-origin" value="*" />
<add name="access-control-allow-headers" value="content-type" />
</customHeaders>
</httpProtocol>
<rewrite>
<outboundRules>
<rule name="Set Access-Control-Allow-Origin header">
<match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern="(.*)" />
<action type="Rewrite" value="*" />
</rule>
</outboundRules>
<rules>
<rule name="RewriteIncomingCdnRequest" stopProcessing="true">
<match url="^cdn/(.*)$"/>
<action type="Rewrite" url="{R:1}"/>
</rule>
</rules>
</rewrite>
但这没有帮助,我也找到了问题&amp;答案如下:link,但这只有在您使用CDN + Blob存储(我没有使用)时才有用
我该如何解决这个问题?
修改
我从我的软件包中删除了字体,并在没有CDN的情况下将它们链接起来,这就是诀窍,但这并不能完全解决这个问题
答案 0 :(得分:2)
Azure CDN的这种重写配置对我有用......
<rewrite>
<outboundRules>
<rule name="Set Access Control Allow Origin Header" preCondition="Origin header">
<match serverVariable="RESPONSE_Access-Control-Allow-Origin" pattern="(.*)" />
<action type="Rewrite" value="*" />
</rule>
<preConditions>
<preCondition name="Origin header" logicalGrouping="MatchAll">
<add input="{HTTP_ORIGIN}" pattern="(.+)" />
<add input="{HTTP_X_ORIGINAL_URL}" pattern="^/cdn/(.*)$" />
</preCondition>
</preConditions>
</outboundRules>
<rules>
<rule name="Rewrite CDN requests" stopProcessing="true">
<match url="^cdn/(.*)$" />
<action type="Rewrite" url="{R:1}" />
</rule>
</rules>
</rewrite>
对于Azure CDN(以cdn/
开头的网址)包含非空Origin:
http标头的每个请求,都会向响应中添加Access-Control-Allow-Origin: *
http标头。
答案 1 :(得分:1)
回答这个问题,以防其他人寻求解决方案。 在Azure CDN中,您可以在Verizon Premium配置文件上设置规则以启用CORS。
https://azure.microsoft.com/en-us/documentation/articles/cdn-cors/
这还允许您指定允许访问的域的显式列表,而不仅仅是通配符。
答案 2 :(得分:0)
在使用我的Azure网络应用程序作为原始创建Azure CDN时遇到了同样的问题。
最后,我对你使用了类似的解决方法。
我将@ font-face声明的src属性替换为使用google fonts cdn。并不总是适合所有人,但它对我有用。
@font-face {
font-family: 'Roboto';
font-style: normal;
font-weight: 400;
src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v15/NdF9MtnOpLzo-noMoG0miPesZW2xOQ-xsNqO47m55DA.woff2) format('woff2');
unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB;
}
查看Google提供的所有字体:https://fonts.google.com/
希望这有助于某人!