IIS7 Cache-Control - PullRequest
       26

IIS7 Cache-Control

87 голосов
/ 13 марта 2009

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

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

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

Ответы [ 6 ]

115 голосов
/ 20 августа 2009

Если вы хотите установить заголовок 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"
111 голосов
/ 14 октября 2009

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

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

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

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

Редактировать: удалено запутанное предложение:)

25 голосов
/ 23 марта 2011

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

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

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

19 голосов
/ 13 марта 2009

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

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

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

18 голосов
/ 25 марта 2013

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

Для кэширования статического содержимого в течение 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>
0 голосов
/ 25 февраля 2016

есть простой способ: 1. используя веб-сайт web.config 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...