IE полностью игнорирует заголовки управления кэшем для запросов AJAX? - PullRequest
0 голосов
/ 04 мая 2010

У меня есть, как мне показалось, простой тестовый веб-сайт. Одна страница с одной кнопкой.

Вот копия источника Я работаю с вами, если вы хотите загрузить его и поиграть с ним.

При нажатии этой кнопки создается таймер JavaScript, который выполняется один раз в секунду. Когда функция таймера выполняется, вызывается AJAX для получения текстового значения. Это текстовое значение затем помещается в DOM.

В чем моя проблема?

IE Caching.

Взломайте диспетчер задач и посмотрите, что происходит с процессом iexplorer.exe (для меня IE 8.0.7600.16385) во время выполнения таймера на этой странице.

Видите, как увеличивается память и количество дескрипторов?

альтернативный текст http://www.joshuahayworth.com/content/HandleCount.png

Почему это происходит, когда, по всем данным, у меня отключено кэширование. У меня для параметра кэширования jQuery установлено значение false в $ .ajaxSetup. У меня есть заголовок CacheControl, установленный в no-cache и no-store. Заголовок Expires установлен в DateTime.Now.AddDays (-1). Заголовки устанавливаются как в коде страницы, так и в ответе обработчика HTTP.

Кто-нибудь получил какие-либо идеи относительно того, как я могу запретить IE кэшировать результаты вызова AJAX?

Вот как выглядит процесс iexplorer.exe в ProcessMonitor. Я считаю, что действия, показанные на этой картинке, именно то, что я пытаюсь предотвратить.

альтернативный текст http://www.joshuahayworth.com/content/ProcessMonitor.png

Ответы [ 2 ]

1 голос
/ 04 мая 2010

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

Что-то вроде ... handler.axd? Foo = varing_value_here

НТН

1 голос
/ 04 мая 2010

Когда вы говорите браузеру не кэшировать объект, вы не говорите «не сохраняйте это на диск», вы говорите «делайте что угодно, но не используйте его снова». Число дескрипторов, которое вы видите, это file дескрипторы, просто потому, что он не используется для кэширования, не означает, что файл не был записан и дескриптор, чтобы согласиться с ним.

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

Единственная проблема, которую вы видите, это то, что IE не отпускает эти файловые дескрипторы быстро ... ну, это IE, я не могу объяснить внутреннюю работу там. Может быть, кто-то еще может пролить свет?

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