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 ответов:
Если вы хотите установить заголовок 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>