web-dev-qa-db-ja.com

Webサーバーの構成設定を使用してIIS 7の個々のファイルのキャッシュを無効にする方法を教えてください。

アプリケーションの他のファイルのキャッシュを無効にせずに、ASP.NETアプリケーションで単一のJavaScriptファイルのキャッシュを無効にする方法はありますか?

これはAzureでIIS 7で実行されているため、これを制御する唯一のオプションはwebserverタグ内にあるようです。

現在、以下の設定を使用していますが、これによりすべてのファイルのキャッシュが無効になります。

     <modules runAllManagedModulesForAllRequests="true"/>

    <staticContent>
      <clientCache cacheControlMode="DisableCache"/>
    </staticContent>

  </system.webServer>

頻繁に変更される単一のJavaScriptファイルのキャッシュを無効にしたいだけです。

出来ますか?

39
Dean

私はこの質問を見つけました。以下を使用して、特定のファイルのキャッシュを無効にすることができます。

<configuration>
  <location path="path/to/the/file">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="DisableCache" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

(パスはweb.configファイルからの相対パスであることに注意してください)

または、単一のファイルを独自のディレクトリに配置し、そのディレクトリに独自のweb.configを指定して、その中のすべてのキャッシュを無効にします。

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Cache-Control" value="no-cache" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

[どちらもWindows 7上のIIS7.5でテスト済みですが、Azureで正常に機能することを確認する必要があります]

49
gdt

上記の回答に「プロフィール」タグがないようです

<caching>
  <profiles>
    <add extension=".js" kernelCachePolicy="DontCache" policy="DontCache"/>
  </profiles>
</caching>
8

System.WebServer/Cachingクラスを確認すると、特定の拡張機能にキャッシュプロファイルを適用できます。これにより、少なくとも.jsで終わるすべてのJavascriptファイルを制御できるようになります。

<system.webServer>
...

   <caching>
      <add extension=".js" policy="DontCache" kernelCachePolicy="DontCache" />
   </caching>

</system.webServer>

これにより、クラウドのプロセスキャッシュとカーネルキャッシュの両方で.jsキャッシュが無効になります。

私は考えるファイルだけを含むフォルダにこのweb.configを作成でき、そのフォルダレベルでのみ.jsのキャッシュを無効にします。私は正直言って自分で試したことがないので、試してみてください。


さらに、キャッシング構成に関連するIISのドキュメントをご覧ください。

/ Caching: http://www.iis.net/ConfigReference/system.webServer/caching

/ Caching/Profiles: http://www.iis.net/ConfigReference/system.webServer/caching/profiles

/ Caching/Profiles/Add: http://www.iis.net/ConfigReference/system.webServer/caching/profiles/add

うまくいけば、それに加えて、それらの構成タグに関するいくつかの調査が役立つでしょう。

そうでない場合は、IISリクエストパイプに挿入できるカスタムHTTPモジュールの実装を検討することをお勧めします。これにより、キャッシュ制御をその特定のファイルに絞り込むことができます。

**これに値するのは、IISの動作であり、Azureの内部でも外部でも変わらないため、DevファブリックやAzureのテストに煩わされることなく、このローカルを簡単にテストできます。

7
Taylor Bird

このようにそのフォルダーにweb.configを含めることでフォルダーレベルの拡張機能を削除することで、フォルダーレベルの出力キャッシュを無効にできます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
        <caching>
            <profiles>
                <remove extension=".js" />
            </profiles>
        </caching>

  </system.webServer>
</configuration>

このフォルダでは、.jsで終わるファイルの出力キャッシュが有効になりません。

3
Martijn

開くIISパネル。

サイトから関連アプリケーションを開き、特定のファイルを含むフォルダーに移動します。

右側のペインから、コンテンツビューに切り替えます

希望のファイルを選択してください

ファイルを右クリックして、[機能ビューに切り替え]を選択します。

そこから[HTTP応答ヘッダー]を選択し、[追加]をクリックして新しいヘッダーを追加し、 "Cache-Control"ヘッダーに "no-cache"値を追加します。

1
Rohit

はい、可能です。構成ファイルで行うことができます。
https://stackoverflow.com/a/4821328/2247494 を参照)

<configuration>
    <location path="cache.manifest">
      <system.webServer>
        <staticContent>
          <clientCache cacheControlMode="DisableCache" />
        </staticContent>
      </system.webServer>
    </location>
</configuration>
0
jherax