IIS7でフォルダーおよび拡張機能ごとに静的コンテンツキャッシュを構成する方法


143

IIS7で、ASP.NET Webサイトの静的コンテンツキャッシュのルールを設定したいと思います。

私はこれらの記事を見ました、それは<clientCache />要素を使用してそれを行う方法の詳細ですweb.config

クライアントキャッシュ<clientCache>(IIS.NET)
IISの静的コンテンツにExpiresまたはCache Controlヘッダーを追加(Stack Overflow)

ただし、この設定はすべての静的コンテンツにグローバルに適用されるようです。特定のディレクトリまたは拡張機能に対してのみこれを行う方法はありますか?

たとえば、別々のキャッシュ設定が必要な2つのディレクトリがあるとします。

/static/images
/content/pdfs

それは、(キャッシュ・ヘッダーを送信するためのルールを設定することが可能でmax-ageexpires拡張機能やフォルダのパスに基づいて、等)?

web.configIISコンソールにアクセスできないため、この方法でアクセスできる必要があります。

回答:


217

ルートのいずれかでフォルダー全体に特定のキャッシュヘッダーを設定できますweb.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <!-- Note the use of the 'location' tag to specify which 
       folder this applies to-->
  <location path="images">
    <system.webServer>
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" />
      </staticContent>
    </system.webServer>
  </location>
</configuration>

またはweb.config、コンテンツフォルダー内のファイルでこれらを指定できます。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="00:00:15" />
    </staticContent>
  </system.webServer>
</configuration>

特定の種類のファイルを対象とする組み込みのメカニズムは知りません。


1
すごい。IIS 7についての本を勧めますか。これらについて学びたいのですが。ありがとう。
vtortola

5
@vtortola-[IIS7リソースキット](:amazon.co.uk/dp/0735624410)で問題が発生することはありませんが、実際には非常に便利です。WROXプロIIS7の本はどちらか悪いことではありません。TBH私は主にIIS.NET構成リファレンスサイトから学びました: iis.net/ConfigReference)から、%systemroot%\system32\inetsrv\config\applicationhost.configおよびファイルと関連する友人についての熟考ました。
ケブ

7
これが再帰的であるかどうか誰かが知っていますか?たとえば、イメージパスの下にサブフォルダがある場合、それらもキャッシュされますか?
StuffandBlah

1
注意すべき1つのことは、ブラウザが path=""機密などの場合
クリスS

9
@StuffandBlahはい、再帰的です。自分で試してみたところ、IISは「場所」として指定したフォルダーのサブフォルダー内のファイルに対するすべての要求に同じキャッシュ制御設定を適用しました。
ErikÖjebo

68

ファイルごとに行うことができます。パス属性を使用してファイル名を含めます

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <location path="YourFileNameHere.xml">
        <system.webServer>
            <staticContent>
                <clientCache cacheControlMode="DisableCache" />
            </staticContent>
        </system.webServer>
    </location>
</configuration>

1
そして、あなたがそれを特定の拡張子のすべてのファイルに適用したいなら?.xmlまたは* .xmlだけで機能しますか?
Zulgrib

2
:あなたは、アウトバウンド書き換えルールを使用することができ、特定の拡張子にそれを適用する@Zulgrib stackoverflow.com/questions/32987486/...
jotap

@Zulgribタイプのすべてのファイルではなく、複数のファイルにロケーションタグを使用するにはどうすればよいですか。たとえば、ルートフォルダーにあるいくつかのjpgファイルがすべてではありませんか?
Rahatur、

-2

同じ問題がありました。私にとって問題は、画像のキャッシュ制限を設定する方法でした。そして、このサイトに出くわし、問題の処理方法に関するいくつかの洞察が得られました。 :[ https://varvy.com/pagespeed/cache-control.html]


2
stackoverflow.com/help/how-to-answerに従って、リンクからいくつかの情報を回答に追加することを検討してください:外部リソースへのリンクが推奨されますが、リンクの周りにコンテキストを追加して、他のユーザーがそれが何であるかを理解できるようにしてくださいなぜそこにあるのか。ターゲットサイトに到達できない、または永久にオフラインになる場合に備えて、常に重要なリンクの最も関連性の高い部分を引用してください。
Greg the Incredulous
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.