Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Кеширующий прокси. Предотвратить кеширование. (http://forum.oszone.net/showthread.php?t=77816)

mask 18-01-2007 15:26 537927

Кеширующий прокси. Предотвратить кеширование.
 
Стоит такая задача:
необходимо что бы юзер через прокси-сервер всегда получал ликвидную ниформацию с удаленного сервера ( на нем лента новостей), а не кэшированую с прокси.
какой хтмл код для этого надо вставить на ленте?
вариант <META HTTP-EQUIV="Expires" Content="0"> не подходит. нужен еще один способ.

Prisoner 18-01-2007 17:23 537985

Если честно, то на вскидку как Отче Наш не скажу HTML аналогов нижеприведенному php-коду (мне это просто не нужно), но если Вам в самом деле нужен ответ, то не составит труда преобразовать.
Код:

header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header ('Cache-Control: no-store, no-cache, must-revalidate');
header ('Cache-Control: post-check=0, pre-check=0', false);
header ('Pragma: no-cache');


mask 19-01-2007 13:08 538403

Это все те же метаданные, которые помещаются в заголовок HTTP. А есть ли еще способ?
Прокси сохраняет страницу по ее URL, а если ввести URL, но измененный и ссылающийся на эту же страницу (добавить в конец ?=...) то прокси заново загрузит страницу. Можно ли такую возможность как-то использовать в своем коде?

mask 19-01-2007 13:36 538425

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

Prisoner 19-01-2007 15:51 538487

На HTML - только руками :). Можно попробовать на JavaScript. Что-то вроде на событии onload документа:
Код:

var links = document.getElementByTagName('A');
var dt = new Date();
for (i in links) {
  if (!links.hasOwnProperty(i)) continue;
  links[i].href += (links[i].href.indexOf('?') == -1 ? '?rnd=' : '&rnd=') +  + dt.getTime();
}


Vlad Drakula 19-01-2007 16:23 538512

Prisoner
document.getElementByTagName - не сработает
document.getElementsByTagName

for (i in links) -> for (var i = 0; i < links.length; i++)

mask 19-01-2007 23:34 538710

Какой алгоритм этого кода? Причем тут getElementsByTagName('A'). Для Ява скриптов нужен IIS? на Апаче он будет работает? мне просто это надо засунуть в cgi и скомпилить на сях.

Prisoner 20-01-2007 02:33 538797

Vlad Drakula, спасибо, очепятался. Но а на счет цикла можно поспорить, правда, чую, что зря :).
mask, Вы запутались. JS выполняется клиентом - броузером в большинстве случаев. Это всего лишь кусок текста оформленный как того требует JS. Я все сказал постом ранее. Учитывая поправки Vlad Drakula можете пробовать. Почитайте что такое JS, с чем его едят, как внедряют в код страницы. А алгоритм простой, реализующий вашу же мысль на счет переменного URL: после загрузки страницы JS код пробегает по всем ссылкам и добавляет к ним переменный параметр. Что-то не так понимаю?

mask 20-01-2007 08:24 538844

Prisoner Спасибо. Попробовал этот код на своей странице (<SCRIPT LANGUAGE> и событие onLoad - все вроде по правилам) - того, что хотел не получается.
Т.е. при повторном вводе строки урл моей страницы, выводится кэшированная страница, а не грузиться заново.
Как я понял, реализовать это на чистом html не представляется возможным, необходимо использовать скриптовые языки.

Prisoner 20-01-2007 09:36 538855

Vlad Drakula, каюсь, Вы были правы. Мне остается только посыпать голову пеплом и ссылаться на утомленность :) в тщетных попытках обойти массив с численными индексами как хеш %(.
mask, это попробуйте:
Код:

var links = document.getElementsByTagName('A');
var dt = new Date();
for (var i=0; i < links.length; i++)
  links[i].href += (links[i].href.indexOf('?') == -1 ? '?rnd=' : '&rnd=') +  + dt.getTime();


mask 20-01-2007 13:39 538948

Болшое спасибо. Все заработало.


Время: 11:28.

Время: 11:28.
© OSzone.net 2001-