Pytanie Jak zapobiec pamięci podręcznej przeglądarki dla witryny php


Mam witrynę php działającą w chmurze. Kiedykolwiek dodaję nowe pliki css, js lub obrazy, przeglądarka ładuje te same stare pliki js, css i image zapisane w pamięci podręcznej.

Moja witryna zawiera doctype 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)">

Z powodu powyższego doctype i meta code ładuję te same pliki w pamięci podręcznej przeglądarki zamiast nowej


76
2017-11-30 06:26


pochodzenie


No Cache in all Browsers. Możesz także wykonać opcję? RandomGeneratedNumber na plikach, które nie mają być buforowane. - Kodemon
Prawdopodobnie nie chcesz całkowicie wyłączyć pamięci podręcznej dla images / js / css: stackoverflow.com/questions/4206224/... - FoolishSeth


Odpowiedzi:


Spróbuj tego

<?php

header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>

185
2017-11-30 06:33



Dziękuję za odpowiedź - ArrayOutOfBound
Z wyjątkiem "max-age = 0", są to nagłówki wysyłane przez PHP bez określenia powyższego w mojej instalacji. Wygląda na to, że PHP próbuje domyślnie zapobiegać buforowaniu przeglądarki ... - fast-reflexes
Wiele ode mnie ocaliłeś, dziękuję! - Wallysson Nunes
Mam wtyczkę do WordPressa, która wysyła alternatywną kompozycję do starych wersji Internet Explorera, co bardzo źle wpłynęło na niektóre systemy pamięci podręcznej. Ten wpis pojawił się podczas mojej pierwszej wyszukiwarki Google. Dobrze rozegrane. - Imperative
Uwaga: jeśli używasz session_start() potem nadpisze twój nagłówek Cache-Control: private, max-age=10800, pre-check=10800 ponieważ domyślną wartością jest 180 minut session.cache_expire. Jeśli nie możesz uniknąć rozpoczęcia sesji, ale musisz wyłączyć użycie pamięci podręcznej session_cache_limiter('private');session_cache_expire(0);. - mgutt


Tutaj, jeśli chcesz kontrolować to za pomocą HTML: wykonaj poniżej Opcja 1:

<meta http-equiv="expires" content="Sun, 01 Jan 2014 00:00:00 GMT"/>
<meta http-equiv="pragma" content="no-cache" />

A jeśli chcesz kontrolować to poprzez PHP: zrób to jak poniżej Opcja 2:

header('Expires: Sun, 01 Jan 2014 00:00:00 GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', FALSE);
header('Pragma: no-cache');

I Opcja 2 ZAWSZE JEST LEPIEJ, aby uniknąć problemu z buforowaniem opartym na serwerze proxy.


22
2018-02-06 17:17





Możesz spróbować tego:

    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");
    header("Connection: close");

Mam nadzieję, że pomoże to w zapobieganiu pamięci podręcznej, jeśli takie istnieje!


6
2018-01-27 10:56



Dotyczy to tylko buforowania plików HTML, prawda? I nie ma nic wspólnego z eTag? Dzięki! - Sam Levin
tylko pierwsza linia powinna wystarczyć. Piąta linia jest rzeczywiście błędna i nie ma nic wspólnego z odpowiedzią serwera (jest to nagłówek żądania). szósta linia nie będzie miała żadnego efektu. mógłbym kontynuować ... - The Surrican
Proszę - ekscytujące - pee2pee


Miałem problem z buforowaniem moich plików css. Ustawienie nagłówków w PHP mi nie pomogło (być może dlatego, że nagłówki będą musiały zostać ustawione w pliku arkusza stylów zamiast na stronie z linkami do niego?).

Znalazłem rozwiązanie na tej stronie: https://css-tricks.com/can-we-prevent-css-caching/

Rozwiązanie:

Dołącz znacznik czasu jako część zapytania do 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'); ?>">

Do produkcji (gdzie buforowanie to głównie dobra rzecz):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(i przepisuj ręcznie, gdy jest to wymagane)

Lub połączenie tych dwóch:

<?php
    define( "DEBUGGING", true ); // or false in production enviroment
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo (DEBUGGING) ? date('_Y-m-d_H:i:s') : ""; ?>">

EDYTOWAĆ:

Lub ładniejsza kombinacja tych dwóch:

<?php
    // Init
    define( "DEBUGGING", true ); // or false in production enviroment
    // Functions
    function get_cache_prevent_string( $always = false ) {
        return (DEBUGGING || $always) ? date('_Y-m-d_H:i:s') : "";
    }
?>
<!-- ... -->
<link rel="stylesheet" type="text/css" href="style.css?version=3.2<?php echo get_cache_prevent_string(); ?>">

3
2017-10-12 13:11





Zapobieganie pamięci podręcznej przeglądarki nie jest dobrym pomysłem w zależności od przypadku. Szukając rozwiązania znalazłem rozwiązania takie jak to:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=filemtime($file);?>">

Problem polega na tym, że jeśli plik zostanie nadpisany podczas aktualizacji na serwerze, co jest moim scenariuszem, pamięć podręczna jest ignorowana, ponieważ znacznik czasu jest modyfikowany, nawet zawartość pliku jest taka sama.

Używam tego rozwiązania, aby zmusić przeglądarkę do pobierania zasobów tylko wtedy, gdy zmodyfikowano jej zawartość:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">

0
2018-06-21 19:01