Как запретить Firefox и Safari кэшировать содержимое iframe?
У меня есть простая веб-страница с iframe для страницы на другом сайте. И внешняя страница, и внутренняя страница имеют заголовки ответа HTTP для предотвращения кэширования. Когда я нажимаю кнопку «назад» в браузере, внешняя страница работает правильно, но, несмотря ни на что, браузер всегда извлекает кэш страницы в фрейме. IE работает просто отлично, но Firefox и Safari доставляют мне неприятности.
Моя веб-страница выглядит примерно так:
<html>
<head><!-- stuff --></head>
<body>
<!-- stuff -->
<iframe src="webpage2.html?var=xxx" />
<!-- stuff -->
</body>
</html>
Переменная var
всегда изменяется. Несмотря на то, что URL-адрес iframe изменился (и, следовательно, браузер должен сделать новый запрос к этой странице), браузер просто извлекает кэшированное содержимое.
Я изучил HTTP-запросы и ответы, идущие туда-сюда, и заметил, что даже если внешняя страница содержит <iframe src="webpage2.html?var=222" />
, браузер все равно будет получать webpage2.html?var=111
.
Вот что я пробовал до сих пор:
- Изменение URL-адреса iframe со случайным значением var
- Добавление заголовков Expires, Cache-Control и Pragma на внешнюю веб-страницу
- Добавление заголовков Expires, Cache-Control и Pragma на внутреннюю веб-страницу
Я не могу выполнять какие-либо трюки с JavaScript, потому что заблокирован политикой того же происхождения.
У меня заканчиваются идеи. Кто-нибудь знает, как остановить кеширование браузером содержимого iframed?
Обновление
Я установил Fiddler2, поскольку Даниэль предложил провести еще один тест, и, к сожалению, я все еще получаю те же результаты.
Это тест, который я выполнил:
- На внешней странице генерируется случайное число с использованием
Math.random()
в JSP.
- На внешней странице отображается случайное число на веб-странице.
- Внешняя страница вызывает iframe, передавая случайное число.
- На внутренней странице отображается случайное число.
С помощью этого теста я могу точно узнать, какие страницы обновляются, а какие кэшируются.
Визуальный тест
Для быстрого теста я загружаю страницу, перехожу на другую страницу и затем нажимаю «назад». Вот результаты:
Исходная страница:
- Наружная страница: 0.21300034290246206
- Внутренняя страница: 0.21300034290246206
Покинуть страницу, затем вернуться назад:
- Наружная страница: 0,4470929019483644
- Внутренняя страница: 0,21300034290246206
Это показывает, что внутренняя страница кэшируется, хотя внешняя страница вызывает ее с другим параметром GET в URL. По какой-то причине браузер игнорирует тот факт, что iframe запрашивает новый URL; он просто загружает старый.
Тест Скрипача
Конечно, Фиддлер подтверждает то же самое.
(Я загружаю страницу.)
Внешняя страница называется. HTML:
0.21300034290246206
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206" />
http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206 называется.
(Я отхожу от страницы, а затем нанослю ответный удар).
Внешняя страница называется. HTML:
0.4470929019483644
<iframe src="http://ipv4.fiddler:1416/page1.aspx?var=0.4470929019483644" />
http://ipv4.fiddler:1416/page1.aspx?var=0.21300034290246206 называется.
Что ж, из этого теста похоже, что веб-браузер не кэширует страницу, а кэширует URL-адрес iframe, а затем делает новый запрос на этот кэшированный URL-адрес. Тем не менее, я все еще не знаю, как решить эту проблему.
У кого-нибудь есть идеи, как запретить веб-браузеру кэшировать URL-адреса iframe?