Почему этот 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 даже не отправляет условный запрос - он слепо использует кэшированную копию!
2 ответа
http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html говорит: "Частный (не общий) кеш МОЖЕТ кешировать ответ".
Я думаю, что все может быть, вы можете быть уверены, что страница не будет кэшироваться в публичном кэше, а не страница будет кэшироваться