Używam lighttpd do obsługi plików statycznych. Mam kilka zdjęć w katalogu, który regularnie aktualizuję. Spowoduje to zmianę zawartości pliku (i rozmiaru pliku), a także datę modyfikacji, ale nie ich nazwę pliku.
Kiedy uzyskuję dostęp do plików przez http, aktualizacje nie są brane pod uwagę, a lighty obsługuje stary plik. Mogę ręcznie zmienić nazwę pliku na coś innego, a następnie lighttpd zwróci błąd 404, a jeśli zmienię nazwę mojego pliku, otrzymam poprawną zaktualizowaną wersję. Wydaje się, że lightty używa własnego mechanizmu pamięci podręcznej (co jest w porządku) do zwracania plików statycznych. Niestety wydaje się, że ten mechanizm nie aktualizuje się sam, gdy pliki są modyfikowane.
Sprawdziłem przez Wireshark, a moja przeglądarka naprawdę wysyła żądanie do pliku, to nie jest problem z buforowaniem przeglądarki. Zwraca 200 OK przy żądaniu z pustej pamięci podręcznej, a 304 niezmodyfikowany inaczej, zgodnie z oczekiwaniami. Ale plik jest zwracany z niewłaściwym nagłówkiem Ostatnia modyfikacja, który nie odzwierciedla rzeczywistej daty ostatniej modyfikacji.
Może istnieje jakaś dyrektywa config, której nie jestem świadomy?
Chciałbym, aby pliki zwrócone przez Lighty odzwierciedlały bezpośrednio zmiany dokonane na dysku lub przynajmniej mogły unieważnić pamięć podręczną.
Aktualizacja dla każdego, kto podąży za tym pytaniem: znalazłem winowajcę. Jeśli zaktualizuję plik statyczny, Lighty nie zwróci nowej treści, ale zwróci nową długość treści w swoich nagłówkach, co spowoduje wyświetlenie śmieci. Jeśli skompresuję plik za pomocą mod_compress, problem zniknie, ponieważ mod_compress korzysta z własnego systemu buforowania. Niestety nie mogę skompresować wszystkich plików (na przykład plików obrazów). Jest to więc tylko częściowa poprawka, ale wrócę do niej później i chętnie znajdę rozwiązanie.