[PHP] last-modified i ponowne pobieranie obrazków

0

Mój problem wygląda następująco: napisałęm skrypt wyświetlający obrazki (które raczej się nie zmieniają), ale przy każdym wejściu na stronę FireFox pobiera obrazki od nowa. Próbowałem sprawę załatwić, dodając header("Last-Modified: ".date("r", filectime($plik)));, ale to nic nie dało :(

zauważyłem, że obrazki ładowane bezpośrednio, mają w nagłówku jeszcze coś takiego: Etag: "xxxxxx-xxxx-xxxxxxxx", w miejscu x są róże cyferki i literki... Czy to może być odpowiednialne za to, że przeglądarki nie ładują ponownie obrazków? Jak to wygenerować?

0

tak etag jest identyfiaktorem dzieki ktoremu serwer i przegladarka moga lepoj sie ze soba komunikowac ale o to juz musisz Ty zadbac w skrypcie otoz przegladarka otrzymuje Etaga moze to byc np odczytane z pliku ostatnia data modyfikacji pliku taki etag jest wysylany wraz z zawartoscia strony(oczywiscie jesli stwierdzi ze konieczne jest aby musiala ponownie pobrac ta zawartosc) pozniej gdy ponownie przegladarka komunikuje sie z serwerem wysyla ten etag do niego i teraz serwer porownuje wartosc tego etagu w tym wypadku ostatnia date modyfikacji pliku z aktualna jesli sie zgadzaja wysyla naglowek: "HTTP/1.1 304 Not changed" co oznacza zeby przegladarka nie pobierala ponownie zawartosci tylko skorzystala z bufora w innym wypadku tego headera po prostu nie wysylasz oczywiscie w raz z nim wysylasz tez ponownie etaga jak i last-modified ogolem kroki tego sprowadzaja sie do:

  • pobrania headerow za pomoca getallheaders()
  • sprawdzenia zawartosci If-Modified-Since(data ostatniej modyfikacji) jesli jest ustawione i jesli nie zgadza sie z aktualna wartoscia daty modyfikacji ustalenia zalozmy flagi modyfikacji zawartosc na true albo false w zaleznosci czy data jest < czy >= od aktualnej
  • sprawdzenia zawartosc If-None-Match(zawartosc Etag) jesli zawartosc sie nie zgadza z aktualna ustalamy flage modyfikacji na true jesli sie zgadza na false
  • kolejny krok jest sprawdzenie flagi modyfikacji i wyslanie badz nie naglowka "HTTP/1.1 304 Not changed"
  • i ostatni ponowne wyslanie naglowkow last-modified, etag i reszte juz nie bede tutaj ich wszystkich wymienial w kazdym razie google Twoim przyjacielem ;)
    i teraz odnosnie samej zawartosci strony ktora buforujesz uzywajac ob_start w zaleznosci
    W sumie wystarczy sprawdzac last-modified ale od standardu HTTP 1.1 wszedl tez Etag i zaleca sie uzywanie obydwu po prostu musisz zrozumiec fakt ze gdy strona jest generowana dynamicznie Ty musisz zadbac o to aby przegladarka wiedziala kiedy powinna aktualizowac zawartosc a kiedy nie musi same wyslanie headerow nic nie daje glownym headerem ktory o tym decyduje jest wlasnie HTTP/1.1 304 Not changed" i Ty musisz w skrypcie okreslic kiedy powinien byc wyslany a kiedy nie + buforowana zawartosc strony oczywiscie
0

A nie chodzi tu przypadkiem o zwykle Content: catch-all w header w stronie HTML ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1