Какой параметр в IIS может вызывать загрузку XAP каждый раз при доступе к странице из свежего IE?

У меня есть пример программы, которая ничего не делает, кроме Hello World. Я открываю IE, перехожу в среду разработки и получаю доступ к silverlight, он загружает XAP в первый раз, а затем, если я закрываю IE и открываю снова, XAP не загружается. Поскольку изменений нет, я ожидаю, что он не загрузится.

После развертывания в среде QA я впервые открываю IE, он загружает XAP, как и ожидалось. Теперь закройте IE и откройте снова, я ожидаю, что он не загрузит XAP, но он загрузит снова XAP. Но если я обновлю страницу, он не загрузит XAp. Так что это происходит только в Fresh IE, открытом в нашей среде QA.

Все вышеперечисленные тесты выполняются на одном компьютере с одинаковыми настройками IE. Таким образом, нет проблемы с кешем IE на стороне клиента. Я проверил дату и время на серверах, чтобы увидеть, есть ли разница, как указано в silverlight XAP загружается каждый раз, и наши серверы работают в одно и то же время и дату.

Кто-нибудь знает, как предотвратить загрузку IIS каждый раз?


person Nair    schedule 21.07.2011    source источник


Ответы (1)


Настройки IE по умолчанию означают, что новый экземпляр IE будет всегда пытаться получить каждый уникальный URL-адрес при первом обнаружении. IE делает это, даже если заголовки кеша, отправленные с ресурсом в последний раз, когда он был извлечен, будут указывать на то, что ресурс все еще свежий.

Однако IE будет отправлять If-Modified-Since и / или If-None-Match, когда он повторно запрашивает ресурс, копия которого у него есть в кэше. Следовательно, у сервера есть возможность ответить 304 Not Modified, вы уверены, что этого не происходит? 304 не имеет тела объекта и, следовательно, является дешевым ответом.

Также обратите внимание, что IE может делать некоторые странные эвристические решения, если серверу не удается отправить какие-либо заголовки элементов управления кешем с ресурсом. Один из этих вариантов - когда ресурс достаточно велик, кэширование не выполняется.

Если вы еще этого не сделали, я бы порекомендовал вам установить разумный срок действия для папки ClientBin в диспетчере IIS (в IIS7 выберите папку ClientBin, выберите «Заголовок ответа HTTP», откройте «Установить общие заголовки ..», включите Expire Web содержание.

person AnthonyWJones    schedule 21.07.2011
comment
Только в центре обработки данных мы не получаем 304, а на серверах разработки со скрипачом я вижу ответ 304. Я проверю, включен ли экспорт веб-контента и обновлюсь. - person Nair; 22.07.2011
comment
Мы включили включение срока действия веб-контента до 10 часов, но все равно не работало. - person Nair; 22.07.2011
comment
Позвольте мне исправить свой предыдущий комментарий, изменив срок действия заголовка ответа. Но мы не могли установить его на уровне ClientBin, я должен сделать это на уровне веб-сайта. А в ClientBin это сделать нельзя? - person Nair; 22.07.2011
comment
@Nair: Да, возможно, IIS был бы довольно вздором, если бы вы могли настраивать срок действия только на уровне всего сайта. Какую версию IIS вы используете? - person AnthonyWJones; 22.07.2011
comment
@Nair: Пользовательский интерфейс диспетчера IIS сильно отличается от IIS6. Щелкните правой кнопкой мыши папку ClientBin в диспетчере IIS и выберите «Свойства» в контекстном меню. В появившемся диалоговом окне «Свойства» выберите вкладку «Заголовки HTTP». Там вы можете включить срок действия контента. - person AnthonyWJones; 22.07.2011
comment
Мне удалось сделать то, что вы предложили, но я нашел настоящего виновника в моем случае csharpramble.wordpress.com/2011/07/26/ - person Nair; 26.07.2011
comment
@Nair: Иногда вы можете столкнуться с этой проблемой даже с одним сервером IIS. Если версия метабазы ​​изменяется на сервере, изменяется ETag, поэтому вам придется снова получить все содержимое. Но IE, по крайней мере, предыдущие версии IE, которые я не проверял IE9, не будет обновлять ETag текущего ресурса. Таким образом, в течение неопределенного периода времени у вас будет постоянно извлекаться весь контент, независимо от того, что находится в кеше. - person AnthonyWJones; 26.07.2011