eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.www › Jak działa nagłówek max-age?
Ilość wypowiedzi w tym wątku: 40

  • 11. Data: 2010-11-19 20:16:57
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-19 19:09, Paweł Piskorz pisze:
    > Nie wiem w czym go ustawiasz, ale na prawdę nie jest tak trudno dodać
    > 100 sekund do bieżącej daty.

    Przepraszam, przymulony jestem. Za dużo pracy...

    Wygląda na to, że ten nagłówek kompletnie niczego nie zmienia albo źle
    zarządzam nagłówkami. Zerknij na to co poniżej. Wchodzę na stronę
    pierwszy raz. Browser wysyła nagłówki zapytania (w/g firebuga,
    uwzględniam istotne dla sprawy jedynie):

    Pragma no-cache
    Cache-Control no-cache

    W odpowiedzi (200) dostaję:

    Date Fri, 19 Nov 2010 20:07:54 GMT
    Server Apache
    Expires Fri, 19 Nov 2010 20:08:54 GMT
    Cache-Control must-revalidate
    Pragma no-cache
    Last-Modified Wed, 17 Nov 2010 12:14:04 GMT


    Zauważ, że ustawiłem 60 sekund na wygaśnięcie. Klikam sobie jakiś link w
    serwisie WWW aby wylądować na innej wewnętrznej stronie. Po przeszło
    minucie znów klikam na link prowadzący do strony j/w. Zapytanie browsera
    zawiera nagłówki:

    If-Modified-Since Wed, 17 Nov 2010 12:28:07 GMT

    A odpowiedź (304):

    Date Fri, 19 Nov 2010 20:10:07 GMT
    Server Apache
    Expires Fri, 19 Nov 2010 20:11:07 GMT
    Cache-Control must-revalidate
    Pragma no-cache
    Last-Modified Wed, 17 Nov 2010 12:28:07 GMT

    Po stronie PHP mogę badać tylko nagłówek If-Modified-Since bo nic innego
    Firefox mi nie przesyła. Nie mam więc narzędzia determinującego czy mam
    odesłać 200 czy 304.


  • 12. Data: 2010-11-19 20:43:11
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-19 19:56, porneL pisze:
    >
    > Jeżeli dokument został zmodyfikowany 2 dni temu, to jest taki sam teraz
    > jak i 100 sekund temu.
    >
    > Jeżeli przeglądarka ma dokument z datą sprzed 2ch dni, a ty go
    > zmodyfikowałeś wczoraj, to zauważysz, że musisz wysłać nowy.
    >
    > Chyba, że wysyłasz zupełnie fikcyjny last-modified. Wtedy to twój
    > problem...

    No to już prawie u celu jesteśmy. Zaraz wyślę Ci odpowiedź odnośnie tego
    co poniżej napisałeś.


  • 13. Data: 2010-11-19 20:51:17
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-19 19:53, porneL pisze:
    >
    > Informuje cię o tym wykonując zapytanie(przed upływem 100 sekund po
    > prostu nie wykona zapytania).

    Badając działanie max-age dociekałem dlaczego zawsze odpytuje mi serwer
    i to serwer wysyła 304. Wstępnie zakładałem, że jeśli nie minie te 100
    sekund to browser powinien cicho siedzieć przy kolejnych wizytach danego
    URL. Dopiero po setnej sekundzie powinien zapytać serwera o to czy coś
    się zmieniło. Dopiero wtedy serwer powinien wysłać 304 i mieć spokój od
    przeglądarki przez kolejne 100 sekund. Prawda? A dlaczego tak nie jest?

    A jak do tego doszedłem? A mianowicie w taki sposób:

    1. Wchodzę na dany URL (po raz kolejny).
    2. Serwer wysyła:
    header('HTTP/1.1 304 Not Modified A');
    3. Wchodzę na jakiś link wewnętrzny w serwisie (inna strona).
    4. Zmieniam w PHP
    header('HTTP/1.1 304 Not Modified B');
    5. Klikam na link prowadzący do adresu URL jak w p.1
    6. Firebug pokazuje mi odpowiedź 304 z literką B.

    Czyli musiało dojść do niechcianej komunikacji. Czyli serwer spełnił
    funkcję validatora a nie miał.


  • 14. Data: 2010-11-19 22:24:30
    Temat: Re: Jak działa nagłówek max-age?
    Od: porneL <n...@p...net>


    > W odpowiedzi (200) dostaję:
    >
    > Date Fri, 19 Nov 2010 20:07:54 GMT
    > Server Apache
    > Expires Fri, 19 Nov 2010 20:08:54 GMT
    > Cache-Control must-revalidate
    > Pragma no-cache
    > Last-Modified Wed, 17 Nov 2010 12:14:04 GMT
    >
    >
    > Zauważ, że ustawiłem 60 sekund na wygaśnięcie.

    Ustawiłeś sprzeczne informacje.

    Cache-control: must-revalidate oznacza, że przeglądarka *musi* *za każdym
    razem* wysyłać zapytanie do serwera, żeby sprawdzić, czy ma świeży cache.
    no-cache, must-revalidate, itp. są odwrotnością max-age.

    must-revalidate jest nawet mocniejsze od no-cache (które też masz, tylko w
    stylu z lat 90tych), bo no-cache wolno używać off-line, a must-revalidate
    nie.

    --
    http://pornel.net
    this.author = new Geek("porneL");


  • 15. Data: 2010-11-20 10:14:23
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-19 23:24, porneL pisze:
    >
    >> W odpowiedzi (200) dostaję:
    >>
    >> Date Fri, 19 Nov 2010 20:07:54 GMT
    >> Server Apache
    >> Expires Fri, 19 Nov 2010 20:08:54 GMT
    >> Cache-Control must-revalidate
    >> Pragma no-cache
    >> Last-Modified Wed, 17 Nov 2010 12:14:04 GMT
    >>
    >>
    >> Zauważ, że ustawiłem 60 sekund na wygaśnięcie.
    >
    > Ustawiłeś sprzeczne informacje.

    A tak, to pomyłka. Eksperymentowałem tu z różnymi ustawieniami tak aby
    Expires mogło zadziałać. Zapomniałem przywrócić wartość "public",
    przepraszam.

    W drugim kroku usunąłem Expires i ustawiałem Cache-Control na public,
    private, max-age (=0 i 100), no-cache. Ze zdumieniem stwierdziłem, że
    nie wpływa to na nic kompletnie. Zachowują się te wartości tak jak
    must-revalidate. Czyli do serwera leci if-modified-since a on musi
    odpowiedzieć wtedy 304. Co ciekawe - dotyczy to WYŁĄCZNIE pliku
    określonego przez URL. Cache poprawnie działa (nie próbuje pobierać)
    plików typu JS/CSS/obrazki gdzie wysyłam identyczne nagłówki. W nich
    również ustawiam m.in. max-age, choć dodatkowo Etag również. Dorzuciłem
    eksperymentalnie Etag do pliku wskazywanego przez URL lecz to niczego
    nie zmieniło w cacheowaniu - przeglądarka wysyła do CMS jeden nagłówek
    więcej if-none-match w odpowiedzi - to jedyna różnica. Wygląda na to, że
    plik wskazywany przez URL zachowuje się zawsze tak jakby miał ustawione
    "must-revalidate". Przerzuca validowanie czasu na serwer.

    Poniżej załączam istotne nagłówki dla pliku graficznego (czytanego
    dynamicznie z bazy - nie ma go na dysku), który jest cacheowany a
    jeszcze niżej dla omawianego dokumentu, który wymaga validacji serwera.
    Szczerze mówiąc nie widzę różnicy, która wymusza validację dla dokumentu.

    Plik graficzny zapytanie:

    GET /readfile/PICT3998.jpg HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.12)
    Gecko/20101026 Firefox/3.6.12
    Accept: image/png,image/*;q=0.8,*/*;q=0.5
    Accept-Language: pl,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Cookie: PHPSESSID=03f97454afa9d17e77c2cdc2f2260fff
    If-Modified-Since: Sat, 20 Nov 2010 10:12:11 GMT
    If-None-Match: "1-1290244331"
    Cache-Control: max-age=0

    Plik graficzny odpowiedź:

    HTTP/1.1 304 Not Modified
    Date: Sat, 20 Nov 2010 09:58:12 GMT
    Server: Apache
    Connection: Keep-Alive
    Keep-Alive: timeout=15, max=99
    Etag: 1-1290244331
    Cache-Control: max-age=600
    Vary: Accept-Encoding


    Dokument zapytanie:
    GET / HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.12)
    Gecko/20101026 Firefox/3.6.12
    Accept: text/html,application/xhtml+xml,application/xml;q=0.
    9,*/*;q=0.8
    Accept-Language: pl,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Cookie: PHPSESSID=03f97454afa9d17e77c2cdc2f2260fff
    If-Modified-Since: Sat, 20 Nov 2010 09:19:22 GMT
    Cache-Control: max-age=0

    Dokument odpowiedź:
    HTTP/1.1 304 Not Modified
    Date: Sat, 20 Nov 2010 09:58:12 GMT
    Server: Apache
    Connection: Keep-Alive
    Keep-Alive: timeout=15, max=96
    Expires: Thu, 19 Nov 1981 08:52:00 GMT
    Cache-Control: max-age=60
    Vary: Accept-Encoding

    Nagłówek Expires sam się dokleja. Jego ustawienie w PHP na teraz plus to
    co jest w max-age nie ma wpływu. Oto dowód:

    Dokument zapytanie:
    GET / HTTP/1.1
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2.12)
    Gecko/20101026 Firefox/3.6.12
    Accept: text/html,application/xhtml+xml,application/xml;q=0.
    9,*/*;q=0.8
    Accept-Language: pl,en-us;q=0.7,en;q=0.3
    Accept-Encoding: gzip,deflate
    Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7
    Keep-Alive: 115
    Connection: keep-alive
    Cookie: PHPSESSID=03f97454afa9d17e77c2cdc2f2260fff
    If-Modified-Since: Sat, 20 Nov 2010 09:19:22 GMT

    Dokument odpowiedź:
    HTTP/1.1 304 Not Modified
    Date: Sat, 20 Nov 2010 10:10:22 GMT
    Server: Apache
    Connection: Keep-Alive
    Keep-Alive: timeout=15, max=99
    Expires: Sat, 20 Nov 2010 10:11:22 GMT
    Cache-Control: max-age=60
    Vary: Accept-Encoding




  • 16. Data: 2010-11-20 11:47:20
    Temat: Re: Jak działa nagłówek max-age?
    Od: porneL <n...@p...net>

    On Sat, 20 Nov 2010 10:14:23 -0000, Marek <b...@e...com> wrote:

    > Dokument zapytanie:
    > GET / HTTP/1.1

    > Cache-Control: max-age=0

    Wygląda jakbyś kazał przegądarce odświeżyć stronę.

    --
    http://pornel.net
    this.author = new Geek("porneL");


  • 17. Data: 2010-11-20 14:15:23
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-20 12:47, porneL pisze:
    > On Sat, 20 Nov 2010 10:14:23 -0000, Marek <b...@e...com> wrote:
    >
    >> Dokument zapytanie:
    >> GET / HTTP/1.1
    >
    >> Cache-Control: max-age=0
    >
    > Wygląda jakbyś kazał przegądarce odświeżyć stronę.

    Hej, to nie ja tylko przeglądarka :-) Ja wysyłam do przeglądarki max-age
    60 dla dokumentów lub 600 dla plików w tym przypadku. Gdy wchodzimy
    ponownie na dokument, w ramach którego to wysłałem, to przeglądarka robi
    GET'a przesyłając niz gruszki ni z pietruszki Cache-Control: max-age=0
    DO SERWERA.


  • 18. Data: 2010-11-20 14:22:42
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    Tak dla usystematyzowania, w moim opisie zapytanie to jest wiadomość
    wysłana z przeglądarki do serwera, a odpowiedź - w drugą stronę. Nie
    wiem po co przeglądarka do serwera wysyła Cache-control. Przynajmniej
    tak firebug "twierdzi". W każdym razie ignoruję to i sprawdzam jedynie
    if-modified-since.

    Na wszelki wypadek przypomnę też, że zależy mi na pełnym cache'owaniu
    niektórych stron - spowodowaniu aby przeglądarka w ogóle nie odpytywała
    serwera przez pewien czas od momentu ostatnich odwiedzin. Nie potrafię
    tego spowodować w stosunku do pliku PHP generującego HTML i bez problemu
    potrafię dla wszystkich includów (CSS, JS, obrazki).


  • 19. Data: 2010-11-20 14:41:49
    Temat: Re: Jak działa nagłówek max-age?
    Od: porneL <n...@p...net>

    On Sat, 20 Nov 2010 14:22:42 -0000, Marek <b...@e...com> wrote:

    > Tak dla usystematyzowania, w moim opisie zapytanie to jest wiadomość
    > wysłana z przeglądarki do serwera, a odpowiedź - w drugą stronę. Nie
    > wiem po co przeglądarka do serwera wysyła Cache-control.

    To dziwne. Normalnie przeglądarki tego nie wysyłają, chyba że wciśniesz F5
    lub podobne.

    > Na wszelki wypadek przypomnę też, że zależy mi na pełnym cache'owaniu
    > niektórych stron - spowodowaniu aby przeglądarka w ogóle nie odpytywała
    > serwera przez pewien czas od momentu ostatnich odwiedzin. Nie potrafię
    > tego spowodować w stosunku do pliku PHP generującego HTML i bez problemu
    > potrafię dla wszystkich includów (CSS, JS, obrazki).

    Cache-Control: max-age albo nawet samo Expires powinno wystarczyć do tego.
    W PHP session.cache_limiter totalnie psuje cache.

    --
    http://pornel.net
    this.author = new Geek("porneL");


  • 20. Data: 2010-11-20 18:07:32
    Temat: Re: Jak działa nagłówek max-age?
    Od: Marek <b...@e...com>

    W dniu 2010-11-20 15:41, porneL pisze:

    >
    > Cache-Control: max-age albo nawet samo Expires powinno wystarczyć do
    > tego. W PHP session.cache_limiter totalnie psuje cache.
    >

    Ahhh, to w tym rzecz! Słyszałem o tym lecz nie miałem okazji usłyszeń
    uzasadnienia. Na czym w zasadzie polega psucie cache przez PHP?
    Teoretycznie PHP tylko cookie śle. Czy coś odbywa się wbrew RFC?

strony : 1 . [ 2 ] . 3 . 4


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: