IIS7 Cache-Control


Я пытаюсь сделать что-то, что я думал, будет достаточно просто. Попросите 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.

6 82

6 ответов:

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

вы можете, однако, отказаться от этой сети.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"

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

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

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

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

Edit: удалено запутанное предложение:)

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

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

кэшировать статическое содержимое в течение 500 дней с помощью заголовка public cache-control.

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

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

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

дополняя ответ Элмера, поскольку мое редактирование было откатано.

кэшировать статическое содержимое в течение 365 дней с заголовком public cache-control, 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 дней (один год).

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

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

есть простой способ: 1. использование веб-сайта.конфиг 2. в разделе" staticContent " удалите определенное fileExtension и добавьте 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>