Мне нужно перезагрузить страницу с помощью JavaScript и убедиться, что она не извлекается из кеша браузера, а вместо этого перезагружает страницу с сервера. [Как элементы страницы будут изменяться промежуточный]
В IE и FF я обнаружил, что следующий код работал нормально:
window.location.reload(true);
Однако он не работает в Chrome или Safari.
Я попробовал следующее, но также безрезультатно;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
Есть ли решение этой проблемы?
Выводы
Изучив это, я обнаружил, что эта проблема связана с обработкой протокола HTTP,
- Chrome отправляет запрос с полем
Pragma: no-cache
HTTP - Сервер отвечает полем
Last-Modified: DATE1
- JS использует
location.reload(true)
для принудительной перезагрузки с сервера, не кэширующего - Chrome отправляет запрос с полем
If-Modified-Since: DATE1
- Сервер отвечает
HTTP Status 304 Not Modified
Серверное приложение ошибочно не замечает изменения состояния в содержимом динамической страницы и, таким образом, не возвращает 200
.
Тем не менее, Chrome/WebKit является единственным браузером, который отправляет поле If-Modified-Since
при вызове JS location.reload(true)
.
Я думал, что буду делать выводы в этом случае, если кто-то другой столкнется с одной и той же проблемой.