Mam witrynę php uruchomioną na serwerze w chmurze, a kiedy dodam nowe pliki css, js lub obrazy, przeglądarka ładuje te same stare pliki js, css i obrazy przechowywane w pamięci podręcznej.
Moja witryna ma typ dokumentu i metatag, jak poniżej
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta http-equiv="Page-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Page-Exit" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Enter" content="blendTrans(Duration=1.0)">
<meta http-equiv="Site-Exit" content="blendTrans(Duration=1.0)">
Ze względu na powyższy doctype i meta kod ładuję te same pliki buforowane w przeglądarce zamiast nowego
php
http-headers
browser-cache
cache-control
ArrayOutOfBound
źródło
źródło
No Cache in all Browsers
. Możesz również wykonać? RandomGeneratedNumber na plikach, których nie chcesz buforować.Odpowiedzi:
Spróbuj tego
źródło
session_start()
później, nadpisze twój nagłówek,Cache-Control: private, max-age=10800, pre-check=10800
ponieważ 180 minut jest domyślną wartościąsession.cache_expire
. Jeśli nie możesz uniknąć rozpoczęcia sesji, ale musisz wyłączyć użycie pamięci podręcznejsession_cache_limiter('private');session_cache_expire(0);
.header
funkcji jest logiczna dla zastąpienia . Opcjonalny parametr replace wskazuje, czy nagłówek powinien zastąpić poprzedni podobny nagłówek, czy dodać drugi nagłówek tego samego typu.Tutaj, jeśli chcesz kontrolować to za pomocą HTML: zrób jak poniżej Opcja 1:
A jeśli chcesz kontrolować to przez PHP: zrób to jak poniżej Opcja 2:
ORAZ Opcja 2 JEST ZAWSZE LEPSZA, aby uniknąć problemu z buforowaniem proxy.
źródło
Możesz spróbować tego:
Miejmy nadzieję, że pomoże to zapobiec Cache, jeśli takie istnieją!
źródło
Miałem problem z buforowaniem moich plików css. Ustawianie nagłówków w PHP nie pomogło mi (być może dlatego, że nagłówki musiałyby być ustawione w pliku arkusza stylów zamiast strony, która do niego prowadzi?).
Rozwiązanie znalazłem na tej stronie: https://css-tricks.com/can-we-prevent-css-caching/
Rozwiązanie:
Dołącz znacznik czasu jako część zapytania identyfikatora URI dla połączonego pliku.
(Może być używany do css, js, obrazów itp.)
Dla rozwoju:
<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">
W przypadku produkcji (gdzie buforowanie jest głównie dobrą rzeczą):
<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(i przepisz ręcznie, gdy jest to wymagane)
Lub połączenie tych dwóch:
EDYTOWAĆ:
Albo ładniejsze połączenie tych dwóch:
źródło
W zależności od przypadku blokowanie pamięci podręcznej przeglądarki nie jest dobrym pomysłem. Szukając rozwiązania znalazłem takie rozwiązania:
Problem polega na tym, że jeśli plik zostanie nadpisany podczas aktualizacji na serwerze, co jest moim scenariuszem, pamięć podręczna jest ignorowana, ponieważ sygnatura czasowa jest modyfikowana, nawet zawartość pliku jest taka sama.
Używam tego rozwiązania, aby zmusić przeglądarkę do pobierania zasobów tylko wtedy, gdy ich zawartość jest zmodyfikowana:
źródło
stat
zadzwoniłbym. Bez pamięci podręcznej systemu plików, 16ns, topów? Z pamięcią podręczną, niezawodnie <8ns. Nanosekundy. A w moim systemie MD5 może przetwarzać 754 MiB / s bez mrugnięcia. (openssl speed md5
) Łącznie, plik CSS o rozmiarze 100 KB miałby łączny dodatkowy narzut… 129 µs (mikrosekund, 0,1295 ms) + 8ns (co nie wpływa znacząco na ostateczną liczbę) = 129 µs.hash_file('md5', $deployment_counter)
lubhash_file('md5', $cache_clear_counter)
są pierwszymi, które przychodzą na myśl.