IIS7: установите «no-cache» для всех страниц aspx, но не для изображений / css / js - PullRequest
6 голосов
/ 07 января 2010

Я бы нигде не кэшировал свои страницы aspx. По какой-то причине IE игнорирует метатеги, которые установлены с моей главной страницы

<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">

Я пытаюсь проверить, могу ли я установить свой заголовок ответа Http на "Cache-Control" - "no-cache". Установка что-то вроде

HttpContext.Current.Response.Headers.Add("Cache-Control", "no-cache");
   HttpContext.Current.Response.Headers.Add("Exipres", DateTime.Now.AddDays(-1).ToShortDateString());

на каждой странице было бы больно. Я думаю, что если так или иначе мы можем установить это в IIS7 (добавьте этот заголовок к страницам aspx, но не к images / css / js). Возможно ли это?

Редактировать: Согласно предложению в http://technet.microsoft.com/en-us/library/cc753133%28WS.10%29.aspx, добавление настраиваемого заголовка ответа http добавляет заголовок ко всем файлам, включая js, css, images Так что добавление «Cache-Control», «no-cache» здесь тоже не сработало

Edit2: я думаю о добавлении httpmodule. Что-то похожее на http://blogs.technet.com/stefan_gossner/archive/2008/03/12/iis-7-how-to-send-a-custom-server-http-header.aspx. Есть предложения?

Ответы [ 3 ]

3 голосов
/ 07 января 2010

http://technet.microsoft.com/en-us/library/cc770661(WS.10).aspx

По умолчанию IIS кэширует только статический контент; вам придется внести коррективы, если он уже кеширует нестатический контент.

2 голосов
/ 02 ноября 2010

Если вы используете MasterPage для своего сайта, вы можете рассмотреть возможность добавления следующего заголовка ответа к своему событию Page_Load:

protected void Page_Load(object sender, EventArgs e)
{
Response.AddHeader("Cache-Control", "no-cache, no-store, max-age=0, must-revalidate");
}

Поскольку ваши файлы .js не будут использовать MasterPage, браузер должен сохранить ссылку в свой кэш.

Пример выше, который я использую, и он хорошо работает под Firefox3, IE7 и Chrome7. Обратите внимание, что приведенный выше заголовок ответа - это единственное, что я добавил для управления кэшем, и он выполняет свою работу. Однако я часто вижу заголовки ответов Pragma и Expires на других сайтах.

Например, вот заголовки ответа, которые используются в Gmail:

Content-Type: text / html; кодировка = UTF-8
Cache-Control: без кеша, без хранилища, max-age = 0, обязательно повторная проверка
Прагма: без кеша
Истекает: пт, 01 января 1990 00:00:00 по Гринвичу

Дата: вторник, 02 ноября 2010 г. 16:38:15 GMT
x-dns-prefetch-control: off
Контент-кодировка: gzip
Передача-кодировка: чанки
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-защита: 1; Режим = блок
Сервер: GSEServer: GSE

Я не уверен, используются ли они для старых браузеров и / или других новых браузеров.

Я предпочитаю использовать минимальный объем кода для решения проблемы, и у меня никогда (пока) не было случая, когда отмеченного сверху Response.AddHeader было недостаточно.

1 голос
/ 07 января 2010

Один из абсолютно определенных способов запретить кэшированию вашей страницы любым браузером - добавить переменную строки запроса, установленную в случайное число, чтобы ваши ссылки всегда заканчивались на "? Ran =" В прошлом я делал это на ограниченной основе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...