在 IIS 上仅对字体文件启用 CORS

Enabling CORS on IIS for only Font files

有没有办法在 IIS7 上只为特定类型的文件启用 CORS?我将离开这篇文章 (https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/) 并注意到 Apache 和 nginx 示例显示仅当请求正在查找特定内容类型时才启用 CORS,而 IIS 示例显示为所有内容启用 CORS。

我有 CSS 被外部站点引用,但字体文件被浏览器阻止,我希望在 IIS7 上启用 CORS,但仅限于 .woff、.woff2、.tff、. eot 和 .svg 文件。如果可能,我不希望为所有内容启用 CORS。

您可以安装 IIS 重写模块 https://www.microsoft.com/en-us/download/details.aspx?id=7435。安装模块后,重新启动您的 IIS 管理器并在“站点”节点下单击您的网站。如果您在 IIS 部分右侧的 window 中看到 URL Rewrite Module 符号(如下所示),那么您就可以开始了:

然后在您的 Web.config 上,您需要添加以下规则:

<rewrite>
 <rules>
  <rule name="Add Cross Origin Access">
    <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
    <conditions>
      <add input="{REQUEST_URI}" pattern="^[^\?]+\.(ttf|otf|eot|woff|woff2|svg)(\?.*)?$" />
    </conditions>
    <action type="Rewrite" value="*"/>
  </rule>
 </rules>
</rewrite>

您应该将此代码添加到您的 Web.config:

  <location path="fonts/FontName.ttf">
    <system.webServer>
       <httpProtocol>
          <customHeaders>
             <add name="Access-Control-Allow-Origin" value="*" />
          </customHeaders>
       </httpProtocol>
    </system.webServer>
  </location>

Hackerman 的回答很好,它引导我找到了解决方案,但是,我必须进行一些调整。第一个是将规则放在 rewrite 节点下的 outboundRules 部分。

<outboundRules>
    <rule name="Enable CORS for Fonts">
        <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
        <conditions>
          <add input="{REQUEST_URI}" pattern="^[^\?]+\.(ttf|otf|eot|woff|woff2|svg)(\?.*)?$" />
        </conditions>
        <action type="Rewrite" value="*" />
    </rule>
</outboundRules>

最后,更新了正则表达式以防止如下请求,这将允许某人请求任何 URL 跨来源:

/some/critical/javascript/file.js?v=.woff
/api/secure/users?v=.woff

...但它仍然允许以下

/some/font.woff
/some/font.woff?etag
/some/font.woff?v=123