Как запретить Firefox и Safari кэшировать содержимое iframe?
У меня есть простая веб-страница с iframe для страницы на другом сайте. Как внешняя, так и внутренняя страница имеют заголовки HTTP-ответа для предотвращения кеширования. Когда я нажимаю кнопку «назад» в браузере, внешняя страница работает правильно, но, несмотря ни на что, браузер всегда извлекает кеш страницы с iframe. 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; он просто загружает старую.
Скрипач Тест
Конечно, 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?