принудительная перезагрузка двух HTTP-ресурсов на одной странице? - PullRequest
0 голосов
/ 24 августа 2011

Я пытаюсь найти способ заставить ресурс с идентичным URI запрашивать у сервера КАЖДЫЙ РАЗ, на который он ссылается на той же странице.

Например: у меня есть динамически сгенерированное изображение по URL 'mypage.com/img?u=1'

То, что uri - это src для 2 тегов img на той же веб-странице. Независимо от того, каким будет содержимое, изображение загружается один раз, а затем повторно используется из кэша браузера для каждой ссылки на этой странице.

Я пробовал экспериментировать с каждым заголовком кэширования:

header("Etag: \"".time().rand(100000,999999).'"');
header("Expires: ".gmdate("D, d M Y H:i:s",time()-(60*60*24*1000)) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time()-(60*60*24*1000)) . " GMT");
header("Cache-Control: no-store, no-cache, proxy-revalidate, must-revalidate, max-age=0");
header('Pragma: no-cache');

Это, конечно, предотвращает кэширование ресурса при последующих загрузках страницы, но ничего не решает для моей проблемы. Прежде чем вы скажете, что это ошибка моего дизайна, я должен просто использовать разные URI, знать, что в данном текущем случае это не вариант, и динамически не изменять клиентскую сторону URI, на которую ссылаются, после запроса.

Я даже пытался использовать 302 307 и 303 заголовка статуса с перенаправлением местоположения на новый уникальный ресурс, но безрезультатно. Я начинаю думать, что это не решаемая проблема из-за дизайна браузера, но любой вклад будет с благодарностью!

* UPDATE * Если я использую javascript для написания нового изображения с тем же идентификатором URI, который используется браузером при начальной загрузке страницы, он возвращает мне динамический (не кэшированный) результат. Одд

1 Ответ

1 голос
/ 24 августа 2011

Вы пытались слегка изменить ссылку, чтобы получить случайное число в конце?

Итак, ури будет выглядеть так: 'mypage.com/img?u=1&123456' (где 123456 - результат rand () * 100000)

Это может привести к тому, что изображение будет перезагружено и не будет сохранено в кеше браузера во время начальной загрузки страницы

Редактировать на основе ясности ОП

Вы можете попробовать использовать событие javascript onLoad, чтобы дождаться загрузки страницы (если завершено первое изображение), прежде чем начинать запрос ко второму изображению, что-то вроде

    <img src=# id=secondImage>

    document.onLoad = "document.getElementById('secondImage').src = 'mypage.com/img?u=1'";

Дополнительное редактирование

Вы также можете попробовать изменить файл .htaccess

    Header set Cache-Control: "no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0"

Может не помочь, но может

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...