Як запобігти 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 із випадковим значенням змінної
- Додавання заголовків Expires, Cache-Control та Pragma до зовнішньої веб-сторінки
- Додавання заголовків Expires, Cache-Control та Pragma до внутрішньої веб-сторінки
Я не можу робити жодних трюків на JavaScript, оскільки я заблокований політикою того самого походження.
У мене закінчуються ідеї. Хтось знає, як перешкодити браузеру кешувати вміст із вбудованою рамкою?
Оновлення
Я встановив 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?