Кэш-контроль IIS7

Я пытаюсь сделать что-то, что, по моему мнению, будет довольно простым. Получите IIS 7, чтобы сообщить клиентам, что они могут кэшировать все изображения на моем сайте в течение определенного времени, скажем, 24 часа.

Я пробовал шаг http://www.galcho.com/Blog/post/2008/02/27/IIS7-How-to-set-cache-control-for-static-content.aspx, но безрезультатно. Я все еще получаю запросы на сервер с возвратом 304s.

Есть ли у кого способ сделать это? У меня есть графически интенсивный сайт, и мои пользователи забиваются (так же как и мой сервер) каждый раз, когда они запрашивают страницу. Ужасно у изображений, похоже, "Cache-Control private, max-age = 3600" появляется в Firebug, но браузер все еще запрашивает их, когда я нажимаю F5.

Ответ 1

Если вы хотите установить заголовок Cache-Control, в интерфейсе IIS7 ничего не получится, к сожалению.

Однако вы можете отбросить этот web.config в корневой каталог папки или сайта, где вы хотите установить его:

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

Это сообщит клиенту о кешировании содержимого в течение 7 дней в этой папке и во всех подпапках.

Вы также можете сделать это, отредактировав метабазу IIS7 с помощью appcmd.exe, например:

\Windows\system32\inetsrv\appcmd.exe 
  set config "Default Web Site/folder" 
  -section:system.webServer/staticContent 
  -clientCache.cacheControlMode:UseMaxAge

\Windows\system32\inetsrv\appcmd.exe 
  set config "Default Web Site/folder" 
  -section:system.webServer/staticContent 
  -clientCache.cacheControlMaxAge:"7.00:00:00"

Ответ 2

Это не правда, Джефф.

Вам просто нужно выбрать папку в пользовательском интерфейсе IIS 7 Manager (например, изображения или событие в папке веб-приложения по умолчанию), а затем нажать "Заголовки ответов HTTP". Затем вам нужно нажать "Установить общий заголовок" в правой панели и выбрать "Истереть веб-контент". Там вы можете легко настроить максимальный возраст 24 часа, выбрав "После:", введя "24" в текстовое поле и выберите "Часы" в выпадающем списке.

Ваш первый абзац относительно записи web.config прав. Я бы добавил атрибут cacheControlCustom для установки заголовка управления кэшем на "public" или что-то в этом случае.

Вы можете, конечно, добиться того же самого, предоставив записи (или файлы) web.config по мере необходимости.

Изменить: удалено путаное предложение:)

Ответ 3

Я использую этот

<staticContent>
<clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="500.00:00:00" />
</staticContent>

для кэширования статического содержимого в течение 500 дней с общим заголовком кэша кэша.

Ответ 4

У F5 Refresh есть семантика "перезагрузите текущую HTML И ее прямую зависимость". Следовательно, вы должны ожидать, что любой объект imgs, css и js напрямую ссылается на HTML-код, который также будет переназначен. Конечно, 304 является приемлемым ответом на это, но обновление F5 подразумевает, что браузер сделает запрос, а не полагается на свежий кеш-контент.

Вместо этого попробуйте просто перейти в другое место, а затем вернуться назад.

Вы можете принудительно обновить 304, удерживая ctrl, нажимая f5 в большинстве браузеров.

Ответ 5

В дополнение к ответам Элмера, когда мое редактирование было отменено.

Чтобы кэшировать статический контент в течение 365 дней с общим заголовком кэша кеша, IIS можно настроить со следующими

<staticContent>
    <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
</staticContent>

Это преобразуется в заголовок следующим образом:

Cache-Control: public,max-age=31536000

Обратите внимание, что max-age является дельта в секундах, выражаясь положительным 32-битным целым числом, как указано в RFC 2616 Разделы 14.9.3 и 14.9.4. Это представляет собой максимальное значение 2 ^ 31 или 2 147 483 648 секунд (более 68 лет). Однако, чтобы лучше обеспечить совместимость между клиентами и серверами, мы рекомендуем использовать максимум 365 дней (один год).

Как уже упоминалось в других ответах, вы также можете использовать эти директивы также в web.config вашего сайта для всего статического контента. В качестве альтернативы вы можете использовать его только для содержимого в определенном месте тоже (в образце, 30-дневный общий кеш для содержимого в папке cdn):

<location path="cdn">
   <system.webServer>
        <staticContent>
             <clientCache cacheControlCustom="public" cacheControlMode="UseMaxAge" cacheControlMaxAge="30.00:00:00"/>
        </staticContent>
   </system.webServer>
</location>

Ответ 6

существует простой способ: 1. Использование веб-сайта web.config 2. в разделе "staticContent" удалите определенный файлExtension и добавьте mimeMap 3. добавьте "clientCache"

<configuration>
  <system.webServer>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
    <staticContent>
      <remove fileExtension=".ipa" />
      <remove fileExtension=".apk" />
      <mimeMap fileExtension=".ipa" mimeType="application/iphone" />
      <mimeMap fileExtension=".apk" mimeType="application/vnd.android.package-archive" />
      <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="777.00:00:00" />
    </staticContent>
  </system.webServer>
</configuration>