Принудительная перезагрузка страницы в Chrome с помощью Javascript [без кеша]

Мне нужно перезагрузить страницу с помощью JavaScript и убедиться, что она не извлекается из кеша браузера, а вместо этого перезагружает страницу с сервера. [Поскольку элементы страницы будут изменены за это время]

В IE и FF я обнаружил, что следующий код работает нормально;

window.location.reload(true);

Однако это не работает в Chrome и Safari.

Я пробовал следующее, но тоже безрезультатно;

window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);

Есть ли решение этой проблемы?

Выводы

Изучив это, я обнаружил, что проблема связана с обработкой протокола HTTP;

  1. Chrome отправляет запрос с Pragma: no-cacheполе HTTP
  2. Сервер отвечает с полем Last-Modified: DATE1
  3. JS использует location.reload (true)для принудительной перезагрузки с сервера без кэширования
  4. Chrome отправляет запрос с полем If-Modified-Since: DATE1
  5. Сервер отвечает Состояние HTTP 304 Not Modified

Ошибка серверного приложения в том, что оно не заметило изменения состояния содержимого динамической страницы и, таким образом, не вернуло 200. Однако Chrome/WebKit — единственный браузер, который отправляет поле If-Modified-Sinceпри вызове JS location.reload(true).

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

21
задан kiamlaluno 4 July 2012 в 19:48
поделиться