Можно ли управлять с помощью javascript, идет ли браузер на сервер для изображения или в кеш браузера? Могу ли я заставить браузер выполнять вызов сервера, если в противном случае он использовал бы кешированное изображение? Я знаю, что могу просто добавить строку запроса в свой URL-адрес изображения, но, если я правильно понимаю, это работает, потому что браузер видит это как новый образ. Я хочу, чтобы старый образ был заменен в кеше.Есть ли способ защиты клиентов от кэширования на стороне клиента?
ответ
Вы не можете сделать что-либо подобное со стандартным тегом img
. Вы можете создать XMLHttpRequest для изображения и установить заголовок if-modified-since
. Это должно заменить старое изображение в кэше:
var url = "http://www.mysite.com/images/myimage.png";
var xhr = new XMLHttpRequest(); // or x-browser compat function
xhr.open("GET", url, true);
xhr.setRequestHeader("If-modified-since", "Thu Jan 1 00:00:00 UTC 1970");
xhr.onreadystatechange = function()
{
if (xhr.readyState == 4 && xhr.status == 200)
document.getElementById("myImg").src = url;
}
xhr.send();
Вы можете использовать мета-теги на странице для кэш-контроля, не установлен в положение «нет кэша», как так:
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
и
<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
Вы также можете установить страницу «истекать» в точке в прошлом, что в теории будет вызывать браузер для проверки последней версии:
<META HTTP-EQUIV="EXPIRES" value="some date in the past" />
Обратите внимание, что «некоторая дата в прошлом» должна быть GMT в RFC 1123 format.
Обратите внимание, вы можете просто отправить их в самом HTTP заголовке: See Here
Надеется, что это помогает.
Кроме того, я собираюсь начать программирование тематической ska-core группы под названием NO CACHE ... – MisterMister
Спасибо, Энди Э. Что делать с этим: document.getElementById («myImg»). Src = url – morgancodes
@morgancodes: Когда вы устанавливаете образ 'src' в URL-адрес, он будет использовать методы кэширования по умолчанию для браузера и получить кэшированное изображение в настоящее время. Когда вы делаете запрос, нет способов установить заголовки запросов или любые другие связанные с HTTP параметры. Метод в моем ответе заставляет браузер загружать новую копию изображения и хранить его в кеше, а затем переключает элемент изображения на эту недавно кэшированную версию. –
Прохладный. Благодарю. Теперь попробуем попробовать. – morgancodes