Назад | Перейти на главную страницу

Почему этот HTTP-ответ не кешируется?

Ниже приведены заголовки запроса и ответа для страницы в моем веб-приложении:

Заголовки запроса:

GET http://my-server/myapp/mypage.aspx?myid=123 HTTP/1.1
Accept: */*
Accept-Language: en-US
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Win64; x64; Trident/4.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)
UA-CPU: AMD64
Accept-Encoding: gzip, deflate
Host: my-server
Connection: Keep-Alive
Pragma: no-cache
Cookie: <sanitized>

Заголовки ответа:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 173788
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Thu, 15 Jul 2010 17:48:25 GMT

IE8 и Firefox, похоже, игнорируют кешированные копии этой страницы. Оба браузера отправляют одни и те же безусловные запросы каждый раз, когда я загружаю страницу. Я убедился, что IE8, по крайней мере, кэширует ответ в каталоге «Temporary Internet Files».

Насколько я понимаю, Cache-Control: private должен указать обоим браузерам кэшировать ответ. Поскольку информации об истечении срока действия нет, они должны отправлять условные запросы для проверки кэшированной копии для последующих запросов, но этого не происходит. Есть ли какая-то эвристика на уровне браузера, отклоняющая кешированную копию (или вообще предотвращающая кеширование)? Или я просто неправильно понимаю заголовки?

Используемый веб-сервер - это IIS 7.5, работающий в Windows 7 Enterprise. Браузерами являются IE 8 и Firefox 3.6.6, работающие от имени администратора на том же компьютере, что и IIS (запросы выполняются на имя хоста компьютера, а не на localhost).

Интересно, что IE9 Platform Preview 3 даже не отправляет условный запрос - он вслепую повторно использует кэшированную копию!

Попробуйте ответить Expires заголовок.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.1 говорит: "Частный (не общий) кеш МОЖЕТ кешировать ответ ".

Я предполагаю, что все МОЖЕТ, вы можете только быть уверены, что страница не будет кэшироваться в общедоступном кеше, а не что страница будет кэширована