-
11. Data: 2009-01-13 19:09:02
Temat: Re: Przeglądarki zbyt mocno keszują
Od: emil <e...@p...onet.pl>
Maciej Łebkowski wrote:
> Witam,
>
> Wstawiłem na stronie mechanizm wspomagający cache przeglądarek.
> Konkretnie, polegało to na wstawieniu nagłówków:
> ETag: md5(content)
> Last-Modified: date(r, filemtime(plik z contentem))
> Date: date(r)
> Expires: date(r, strtotime(+10 minutes))
> Wszystkie wartości są dobrze przekazywane (tzn, jesli content sie
> zmieni, to faktycznie zmienia sie etag i odpowiednio last-modified)
>
> Efekt, jaki obserwuję:
> Firefox, czasami (nie wiem dokładnie kiedy), w ogóle nie wykonuje
> zapytania do serwera (LiveHTTP headers milczy, log apache rowniez).
> Rozumiem, że jest to naturalne zachowanie, gdyż wysyłany jest
> dziesieciominutowy czas wygasniecia (Expire). Dziwi mnie jednak,
> ze dzieje sie tak tylko czasami - raz czesciej, raz rzadziej. Nie
> udało mi się odnaleźć żadnej sensownej zależności.
>
> Problem: wysyłanie komentarza
> Po dodaniu komentarza, user ląduje na "thank you page", z ktorej
> moze sie cofnac do komentowanej strony. Ta oczywiście jest ciągnięta
> z cache i user jest zmieszany (hej, gdzie moj komentarz?!). Aby tego
> uniknąć, odpowiedz na POST-a wygląda mniej wiecej tak:
>
> HTTP/1.x 302 Found
> Date: Tue, 13 Jan 2009 11:37:11 GMT
> Location: thankyou.html
> Expires: -1
> Pragma: no-cache
> Cache-Control: no-cache
>
> Jednak przeglądarka nic sobie z tego nie robi - nadal pobiera strone
> z cache. Zaobserwowane na Safari i Firefoksie, więc podejrzewam, ze
> robię coś źle.
> Mógłbym zmienić adres, do ktorego wraca user (jakiś ?bust dodać), ale
> kłóci się to z zasadą "jeden wpis, jeden adres".
>
> Jak więc w takim modelu zasugerować odświeżenie informacji o stronie?
>
Pogubiłem się trochę.
Ale od początku:
a) strony które otwierasz POSTem nie są keszowane w przeglądarce.
b) zdecyduj się,albo e-tag albo last-modified, stosowanie razem nie ma
większego sensu, swoją drogą zwracasz 304 w odpowiedzi?
c) Jeśli zwracasz 302,to nagłówki keszowe sobie podaruj, bo tyczą się
one 302, która i tak nie zostanie zakeszowana ;)
d) Jeśli już chcesz obejść kesza to dodaj do URLa parametr np. Location:
/thanyou.html?nc=timestamp
e) ewentualnie wywal expires, wtedy przeglądarka powinna zwsze zapytać o
stronę z If-Modified-Since i najwyżej zwrócisz jej 304.
d) zainstaluj sobie fiddlera i dokładnie popatrz na nagłówki, niektóre
serwery lubią dorzucać coś od siebie.
emil
-
12. Data: 2009-01-13 19:49:41
Temat: Re: Przeglądarki zbyt mocno keszują
Od: Maciej Łebkowski <m...@e...com>
Dnia 13-01-2009 o 20:09:02 emil <e...@p...onet.pl> napisał(a):
> Pogubiłem się trochę.
> Ale od początku:
> a) strony które otwierasz POSTem nie są keszowane w przeglądarce.
> b) zdecyduj się,albo e-tag albo last-modified,
> stosowanie razem nie ma większego sensu,
Nieprawda. Safari czasami wysyła samo if-modified-since, bez
if-none-match. Więc jest sens, dopóki mam userów z Safari/Chrome.
> swoją drogą zwracasz 304 w odpowiedzi?
Oczywiście.
> d) Jeśli już chcesz obejść kesza to dodaj do URLa parametr np. Location:
> /thanyou.html?nc=timestamp
Ten nie jest keszowany, a nawet jeśli, to mnie to nie boli.
> e) ewentualnie wywal expires, wtedy przeglądarka powinna zwsze zapytać o
> stronę z If-Modified-Since i najwyżej zwrócisz jej 304.
Ostatecznie tak właśnie zrobiłem.
> d) zainstaluj sobie fiddlera i dokładnie popatrz na nagłówki, niektóre
> serwery lubią dorzucać coś od siebie.
Jasna sprawa. Niestety nie ma fiddlera na mój system. ;o
--
Maciej Łebkowski
-
13. Data: 2009-01-13 20:27:27
Temat: Re: Przeglądarki zbyt mocno keszują
Od: porneL <n...@p...net>
On Tue, 13 Jan 2009 12:26:50 -0000, pasman <p...@o...pl> wrote:
> dziwne, w nIEpewnym to działa:
>
> <META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
Gdy przeglądarka widzi ten talizman, to strona już dawno jest w cache.
--
this.author = new Geek("porneL");
-
14. Data: 2009-01-13 20:36:01
Temat: Re: Przeglądarki zbyt mocno keszują
Od: porneL <n...@p...net>
On Tue, 13 Jan 2009 12:07:54 -0000, Maciej Łebkowski <m...@e...com>
wrote:
> HTTP/1.x 302 Found
> Date: Tue, 13 Jan 2009 11:37:11 GMT
> Location: thankyou.html
Location powinno mieć cały URL z http:// etc.
> Expires: -1
> Pragma: no-cache
> Cache-Control: no-cache
>
> Jednak przeglądarka nic sobie z tego nie robi - nadal pobiera strone
> z cache. Zaobserwowane na Safari i Firefoksie, więc podejrzewam, ze
> robię coś źle.
Odpowiedź POST i GET jest (nie)cache'owana osobno, niestety.
Przy przekierowaniu nagłówki tyczą się cache przekierowania, a nie strony docelowej.
W thankyou.html musisz wysyłać odpowiednie nagłówki.
Spróbuj dorzucić Content-Location (które teoretycznie powinno wywalać z cache
wskazany URL, jeżeli jest w tej samej domenie).
--
http://sblam.com
this.author = new Geek("porneL");
-
15. Data: 2009-01-13 22:32:55
Temat: Re: Przeglądarki zbyt mocno keszują
Od: Maciej Łebkowski <m...@e...com>
Dnia 13-01-2009 o 21:36:01 porneL <n...@p...net> napisał(a):
>> Jednak przeglądarka nic sobie z tego nie robi - nadal pobiera strone
>> z cache. Zaobserwowane na Safari i Firefoksie, więc podejrzewam, ze
>> robię coś źle.
> Odpowiedź POST i GET jest (nie)cache'owana osobno, niestety.
> Przy przekierowaniu nagłówki tyczą się cache przekierowania, a nie strony
docelowej. W thankyou.html musisz wysyłać odpowiednie nagłówki.
> Spróbuj dorzucić Content-Location (które teoretycznie powinno wywalać z cache
wskazany URL, jeżeli jest w tej samej domenie).
Jest w tej samej domenie, spróbuję jak się wyśpię.
(i nie w thankyou.html, tylko w /article, niestety)
--
Maciej Łebkowski
-
16. Data: 2009-01-13 23:17:12
Temat: Re: Przeglądarki zbyt mocno keszują
Od: emil <e...@p...onet.pl>
Maciej Łebkowski wrote:
> Dnia 13-01-2009 o 20:09:02 emil <e...@p...onet.pl> napisał(a):
>
>> Pogubiłem się trochę.
>> Ale od początku:
>> a) strony które otwierasz POSTem nie są keszowane w przeglądarce.
>> b) zdecyduj się,albo e-tag albo last-modified,
>> stosowanie razem nie ma większego sensu,
>
> Nieprawda. Safari czasami wysyła samo if-modified-since, bez
> if-none-match. Więc jest sens, dopóki mam userów z Safari/Chrome.
>
>> swoją drogą zwracasz 304 w odpowiedzi?
>
> Oczywiście.
>
>> d) Jeśli już chcesz obejść kesza to dodaj do URLa parametr np. Location:
>> /thanyou.html?nc=timestamp
>
> Ten nie jest keszowany, a nawet jeśli, to mnie to nie boli.
>
>> e) ewentualnie wywal expires, wtedy przeglądarka powinna zwsze zapytać o
>> stronę z If-Modified-Since i najwyżej zwrócisz jej 304.
>
> Ostatecznie tak właśnie zrobiłem.
>
>> d) zainstaluj sobie fiddlera i dokładnie popatrz na nagłówki, niektóre
>> serwery lubią dorzucać coś od siebie.
>
> Jasna sprawa. Niestety nie ma fiddlera na mój system. ;o
>
wireshark? ;)
emil