tl; др : no-cache
было включено
Длинная версия
Я наткнулся на сообщение в блоге от парня, имеющего похожую проблему:
Используя функцию автоматической отладки в Fiddler (функцию, которую я никогда не использовал), он сузил ее до наличия определенной записи в заголовках ответа:
Vary: *
Он не понимал , почему этот заголовок вызывает разрыв IE, но он смог удалить его, и это решило его проблему. В моем ответе нет заголовка vary: 0
, но он действительно дал мне направление.
Я читал документацию, касающуюся этой опции: Метод HttpCachePolicy.SetOmitVaryStar . Одна вещь привлекла мое внимание:
Примечание
Использование заголовка var: * может отключить все кэширование клиента.
И поэтому я подумал, что причина того, что «источник XML недоступен для просмотра», заключается в том, что существует политика, заставляющая IE удалять источник XML, как только это будет сделано (т.е. не кэшировать его) 1034 *
Следуя по стопам этого парня, я откопал скрипач и включил Автоматические контрольные точки после ответа . Оказывается, вы можете затем отбросить заголовки ответа, переставить, добавить, изменить, удалить материал.
Оригинальные заголовки (сбои)
HTTP/1.1 200 OK
Date: Thu, 01 Jul 2010 02:53:35 GMT
Server: Microsoft-IIS/7.0
Cache-Control: no-cache
Pragma: no-cache
Content-Type: text/xml; charset=utf-8
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Content-Length: 134772
Via: 1.1 www.example.com
<?xml version="1.0" encoding="utf-8"?>
...
я заметил, что в моих заголовках есть записи, относящиеся к кешированию:
Cache-Control: no-cache
Pragma: no-cache
возможно, если я уберу их? я захожу в точку в фиддлере и вручную удаляю эти две строки, оставляя:
Удалить заголовки управления кешем
HTTP/1.1 200 OK
Date: Thu, 01 Jul 2010 02:55:06 GMT
Server: Microsoft-IIS/7.0
Content-Type: text/xml; charset=utf-8
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Content-Length: 134772
Via: 1.1 www.example.com
<?xml version="1.0" encoding="utf-8"?>
...
Примечание: Заголовки не найдены по ошибке, содержимое всегда устарело, и я хочу клиент обновлять каждый раз.
Мое первоначальное решение устраняет проблему, но вводит новую - поскольку содержимое всегда равно . Хотя я хочу, чтобы т.е. извлекал каждый раз, я не хочу, чтобы он удалял свою локальную копию.
Строка в ashx
, которая вызывает у меня горе:
//client don't cache it (it's too volatile)
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
, который превращается в:
Cache-Control: no-cache
Удаление строки оставляет Cacheability по умолчанию (Private), давая значение ответа:
Cache-Control: private
Это позволяет клиенту кэшировать содержимое, и я могу просматривать источник в браузере.