Как запретить Firefox и Safari кэшировать содержимое iframe?
У меня есть простая веб-страница с iframe на странице на другом сайте. На внешней странице и на внутренней странице есть заголовки HTTP-ответов, чтобы предотвратить кеширование. Когда я нажимаю кнопку "Назад" в браузере, внешняя страница работает правильно, но независимо от того, браузер всегда извлекает кеш страницы iframed. 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?
Update
Я установил Fiddler2, поскольку Daniel предложил выполнить еще один тест, и, к сожалению, я все еще получаю те же результаты.
Это тест, который я выполнил:
- Наружная страница генерирует случайное число, используя
Math.random()
в JSP. - На внешней странице отображается случайное число на веб-странице.
- Наружная страница вызывает iframe, передавая случайное число.
- На внутренней странице отображается случайное число.
С помощью этого теста я могу видеть, какие страницы обновляются, а какие страницы кэшируются.
Визуальный тест
Для быстрого теста загрузите страницу, перейдите на другую страницу и нажмите "назад". Вот результаты:
Оригинальная страница:
- Внешняя страница: 0.21300034290246206
- Внутренняя страница: 0.21300034290246206
Закройте страницу, затем нажмите:
- Внешняя страница: 0.4470929019483644
- Внутренняя страница: 0.21300034290246206
Это показывает, что внутренняя страница кэшируется, хотя внешняя страница вызывает ее с другим параметром GET в URL. По какой-то причине браузер игнорирует тот факт, что iframe запрашивает новый URL-адрес; он просто загружает старый.
Тест Fiddler
Конечно, Fiddler подтверждает то же самое.
(Я загружаю страницу.)
Вызывается внешняя страница. 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?