Как предотвратить кэш браузера для php-сайта


У меня есть php-сайт, работающий на облачном сервере.Когда я когда-либо добавляю новые файлы css, js или изображения, браузер загружает те же старые файлы js, css и изображений, хранящиеся в кэше.

На моем сайте есть доктайп и мета-тег, как показано ниже

<!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)">

Из-за вышеуказанного доктипа и мета-кода я загружаю одни и те же файлы, кэшированные в браузере, вместо нового

Author: ArrayOutOfBound, 2012-11-30

5 answers

Попробуйте это

<?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");
?>
 196
Author: Codesen, 2012-11-30 06:33:23

Здесь, если вы хотите управлять им с помощью HTML: сделайте, как показано ниже Опция 1:

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

И если вы хотите управлять им с помощью PHP: сделайте это, как показано ниже Опция 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');

И Вариант 2 ВСЕГДА ЛУЧШЕ, чтобы избежать проблемы кэширования на основе прокси.

 23
Author: Ritesh Aryal, 2014-02-06 17:22:44

Вы можете попробовать это:

    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");

Надеюсь, это поможет предотвратить кэширование, если таковое имеется!

 6
Author: Aakanksha, 2015-01-27 10:56:00

У меня была проблема с кэшированием моих css-файлов. Настройка заголовков в PHP мне не помогла (возможно, потому, что заголовки нужно было бы устанавливать в файле таблицы стилей, а не на странице, ссылающейся на нее?).

Я нашел решение на этой странице: https://css-tricks.com/can-we-prevent-css-caching/

Решение:

Добавьте метку времени в качестве части запроса URI для связанного файла.
(Может использоваться для css, js, изображений и т.д.)

Для разработка:

<link rel="stylesheet" href="style.css?<?php echo date('Y-m-d_H:i:s'); ?>">

Для производства (где кэширование в основном полезно):

<link rel="stylesheet" type="text/css" href="style.css?version=3.2">
(и перепишите вручную, когда это потребуется)

Или комбинация этих двух:

<?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') : ""; ?>">

РЕДАКТИРОВАТЬ:

Или более красивая комбинация этих двух:

<?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
Author: Lukas, 2015-10-12 13:20:35

Запретить кэш браузера - не очень хорошая идея, в зависимости от конкретного случая. В поисках решения я нашел такие решения:

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

Проблема здесь в том, что если файл перезаписывается во время обновления на сервере, что является моим сценарием, кэш игнорируется, потому что временная метка изменяется, даже содержимое файла остается прежним.

Я использую это решение, чтобы заставить браузер загружать ресурсы только в том случае, если его содержимое изменено:

<link rel="stylesheet" type="text/css" href="meu.css?v=<?=hash_file('md5', $file);?>">
 0
Author: ismavolk, 2018-06-21 19:01:46