Заставить браузер очистить кеш - PullRequest
257 голосов
/ 17 декабря 2009

Можно ли как-то разместить код на моей странице, чтобы при посещении сайта он очищал кеш браузера и мог просматривать изменения?

Используемые языки: ASP.NET, VB.NET и, конечно, HTML, CSS и jQuery.

Ответы [ 17 ]

2 голосов
/ 17 декабря 2009
<meta http-equiv="pragma" content="no-cache" />

Также см. /124027/kak-zastavit-veb-brauzer-ne-keshirovat-izobrazheniya

1 голос
/ 10 июля 2016

Я реализовал это простое решение, которое работает для меня (еще не в производственной среде):

function verificarNovaVersio() {
    var sVersio = localStorage['gcf_versio'+ location.pathname] || 'v00.0.0000';
    $.ajax({
        url: "./versio.txt"
        , dataType: 'text'
        , cache: false
        , contentType: false
        , processData: false
        , type: 'post'
     }).done(function(sVersioFitxer) {
        console.log('Versió App: '+ sVersioFitxer +', Versió Caché: '+ sVersio);
        if (sVersio < (sVersioFitxer || 'v00.0.0000')) {
            localStorage['gcf_versio'+ location.pathname] = sVersioFitxer;
            location.reload(true);
        }
    });
}

У меня есть небольшой файл, в котором находятся html:

"versio.txt":

v00.5.0014

Эта функция вызывается на всех моих страницах, поэтому при загрузке она проверяет, является ли значение версии localStorage ниже текущей версии и выполняет ли

location.reload(true);

... для принудительной перезагрузки с сервера, а не из кэша.

(очевидно, вместо localStorage вы можете использовать куки или другое постоянное клиентское хранилище)

Я выбрал это решение из-за его простоты, поскольку только ведение одного файла "versio.txt" приведет к перезагрузке всего сайта.

Метод queryString сложно реализовать, и он также кэшируется (если вы перейдете с v1.1 на предыдущую версию, загрузка из кеша будет выполняться, то это означает, что кеш не очищается, сохраняя все предыдущие версии в кеше).

Я немного новичок и буду признателен за вашу профессиональную проверку и проверку, чтобы убедиться, что мой метод - хороший подход.

Надеюсь, это поможет.

1 голос
/ 17 декабря 2009

Здесь - страница MDSN по настройке кэширования в ASP.NET.

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.Cache.SetValidUntilExpires(False)
Response.Cache.VaryByParams("Category") = True

If Response.Cache.VaryByParams("Category") Then
   '...
End If
0 голосов
/ 12 июня 2017

Принудительно ли браузеры очищать кэш или перезагружать правильные данные? Я пробовал большинство решений, описанных в stackoverflow, некоторые работают, но через некоторое время он в конечном итоге кэширует и отображает предыдущий загруженный скрипт файл. Есть ли другой способ очистить кеш (css, js и т. Д.) И фактически работать во всех браузерах?

До сих пор я обнаружил, что определенные ресурсы могут быть перезагружены индивидуально, если вы измените дату и время для ваших файлов на сервере. «Очистить кеш» не так просто, как должно быть. Вместо очистки кэша в моих браузерах я понял, что «касание» кэшированных файлов сервера фактически изменит дату и время исходного файла, кэшированного на сервере (протестировано на Edge, Chrome и Firefox), и большинство браузеров автоматически загрузят большинство текущая свежая копия того, что находится на вашем сервере (код, графика и любые мультимедиа тоже). Я предлагаю вам просто скопировать самые последние сценарии на сервере и «сделай прикосновение» решение до того, как ваша программа запустится, поэтому она изменит дату всех ваших проблемных файлов на самую последнюю дату и время, затем он загружает свежую копию в ваш браузер:

<?php
   touch('/www/sample/file1.css');
   touch('/www/sample/file2.js');
?>

затем ... остальная часть вашей программы ...

Мне потребовалось некоторое время, чтобы решить эту проблему (поскольку многие браузеры по-разному работают с разными командами, но все они проверяют время файлов и сравнивают их с загруженной копией в вашем браузере, если обновление даты и времени выполнит обновление) , Если вы не можете пойти по правильному пути, всегда есть другое полезное и лучшее решение. С наилучшими пожеланиями и счастливого кемпинга. Кстати коснитесь (); или альтернативы работают на многих языках программирования, включая javascript bash sh php, и вы можете включить или вызвать их в html.

0 голосов
/ 21 января 2017

Существует один прием, который можно использовать. Он заключается в добавлении параметра / строки к имени файла в теге сценария и изменении его при изменении файла.

<script src="myfile.js?version=1.0.0"></script>

Браузер интерпретирует всю строку как путь к файлу, даже несмотря на то, что идет после "?" параметры. Таким образом, теперь происходит то, что в следующий раз, когда вы обновите свой файл, просто измените номер в теге script на вашем веб-сайте (пример <script src="myfile.js?version=1.0.1"></script>), и каждый пользовательский браузер увидит, что файл изменился, и получит новую копию.

0 голосов
/ 17 декабря 2009

Вы хотите очистить кеш или просто убедиться, что ваша текущая (измененная?) Страница не кэширована?

Если последнее, это должно быть так же просто, как

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
0 голосов
/ 17 декабря 2009

В дополнение к установке Cache-control: no-cache, вы также должны установить заголовок Expires равным -1, если вы хотите, чтобы локальная копия обновлялась каждый раз (в некоторых версиях IE это требуется).

См. HTTP Cache - проверка с сервером, всегда отправка If-Modified-Since

...