Как настроить кэш статического содержимого для каждой папки и расширения в IIS7?

143

Я хотел бы установить правила в IIS7 для статического кэширования содержимого на моем веб-сайте ASP.NET.

Я видел эти статьи, в которых подробно рассказывается, как это сделать, используя <clientCache />элемент в web.config:

Клиентский кэш <clientCache>(IIS.NET)
добавляет заголовок Expires или Cache Control к статическому содержимому в IIS (переполнение стека)

Однако этот параметр применяется глобально ко всему статическому содержимому. Есть ли способ сделать это только для определенных каталогов или расширений?

Например, у меня может быть две директории, которые нуждаются в отдельных настройках кеша:

/static/images
/content/pdfs

Можно ли настроить правила для отправки заголовков кэша ( max-age, expiresи т.д.) на основе расширений и папок путей?

Обратите внимание, я должен быть в состоянии сделать это через, web.configпотому что у меня нет доступа к консоли IIS.

frankadelic
источник

Ответы:

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? Я хотел бы узнать об этих вещах. Спасибо.
Втортола
5
@vtortola - вы не ошибетесь с [комплектом ресурсов IIS7] (: amazon.co.uk/dp/0735624410 ), на самом деле он весьма полезен. Книга Wrox Pro IIS7 тоже неплохая. TBH я узнал в основном из справочного сайта по настройке IIS.NET : iis.net/ConfigReference и поковыряясь в %systemroot%\system32\inetsrv\config\applicationhost.configфайле и связанных с ним друзьях.
Кев
7
Кто-нибудь знает, если это рекурсивный? Например, если у вас есть подкаталоги под вашим путем к изображениям, он также кеширует их?
StuffandBlah
1
Стоит отметить, что в браузере отображается path=""регистр символов
Chris S
9
@StuffandBlah Да, это рекурсивно. Просто попробовал сам, и IIS применил одинаковые настройки управления кэшем ко всем запросам файлов в подпапках папки, которую я указал как «местоположение».
Эрик Ö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?
Зулгриб
2
@Zulgrib, чтобы применить его к определенному расширению, вы можете использовать правила перезаписи исходящих сообщений: stackoverflow.com/questions/32987486/…
jotap
@Zulgrib Как использовать тег местоположения для нескольких файлов, но не для всех файлов типа. Например пару файлов jpg в корневой папке, но не все?
Рахатур
-2

У меня была та же проблема. Для меня проблема заключалась в том, как настроить ограничение кэша для изображений. И я наткнулся на этот сайт, который дал некоторое представление о процедуре, как решить эту проблему. Надеюсь, это будет полезно и вам. Ссылка : [ https://varvy.com/pagespeed/cache-control.html]

Викум Чарука Егодапития
источник
2
Пожалуйста, рассмотрите возможность добавления некоторой информации по ссылке в свой ответ в соответствии с stackoverflow.com/help/how-to-answer : Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели некоторое представление о том, что это такое. и почему это там. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно недоступен.
Грег Невероятный