2010-04-23 7 views
4

Можно ли управлять с помощью javascript, идет ли браузер на сервер для изображения или в кеш браузера? Могу ли я заставить браузер выполнять вызов сервера, если в противном случае он использовал бы кешированное изображение? Я знаю, что могу просто добавить строку запроса в свой URL-адрес изображения, но, если я правильно понимаю, это работает, потому что браузер видит это как новый образ. Я хочу, чтобы старый образ был заменен в кеше.Есть ли способ защиты клиентов от кэширования на стороне клиента?

ответ

0

Вы не можете сделать что-либо подобное со стандартным тегом 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(); 
+0

Спасибо, Энди Э. Что делать с этим: document.getElementById («myImg»). Src = url – morgancodes

+0

@morgancodes: Когда вы устанавливаете образ 'src' в URL-адрес, он будет использовать методы кэширования по умолчанию для браузера и получить кэшированное изображение в настоящее время. Когда вы делаете запрос, нет способов установить заголовки запросов или любые другие связанные с HTTP параметры. Метод в моем ответе заставляет браузер загружать новую копию изображения и хранить его в кеше, а затем переключает элемент изображения на эту недавно кэшированную версию. –

+0

Прохладный. Благодарю. Теперь попробуем попробовать. – morgancodes

1

Вы можете использовать мета-теги на странице для кэш-контроля, не установлен в положение «нет кэша», как так:

<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

Надеется, что это помогает.

+0

Кроме того, я собираюсь начать программирование тематической ska-core группы под названием NO CACHE ... – MisterMister