web-dev-qa-db-ja.com

フォントファイルに対してのみIIS)でCORSを有効にする

IIS7で特定のタイプのファイルに対してのみCORSを有効にする方法はありますか?私はこの記事をやめます( https://www.maxcdn.com/one/tutorial/how-to-use-cdn-with-webfonts/ )そしてApacheとnginxの例が示していることに気づきましたそのCORSは、リクエストが特定のContent-Typeを探している場合にのみ有効になりますが、IISの例では、すべてに対してCORSが有効になっています。

外部サイトで参照されているCSSがありますが、フォントファイルがブラウザーによってブロックされており、IIS7でCORSを有効にしたいのですが、.woff、.woff2、.tff、.eot、および.svgファイルに対してのみです。可能であれば、すべてに対してCORSを有効にしたくありません。

8
Kyle Plunkett

IIS書き換えモジュールをインストールできます https://www.Microsoft.com/en-us/download/details.aspx?id=7435 。モジュールをインストールした後、IISマネージャーを再起動し、[サイト]ノードの下のWebサイトをクリックします。 IISセクションの右側のウィンドウにURL書き換えモジュールの記号(以下に表示)が表示されている場合は、準備ができています。

enter image description here

次に、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>
0
Hackerman

ハッカーマンの答えは素晴らしく、それは私を解決策に導きました、しかし、私がしなければならなかったいくつかの調整があります。 1つ目は、ルールをoutboundRulesノードの下のrewriteセクションに配置することでした。

<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
25
Derek Hunziker

次のコードをWeb.configに追加する必要があります。

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