有没有一种方法可以让我把一些代码放在我的页面上,这样当有人访问一个网站时,它就会清空浏览器缓存,这样他们就可以查看更改了?

使用语言:ASP。净,VB。NET,当然还有HTML, CSS和jQuery。


当前回答

并非如此。一种方法是在传递内容时发送适当的头文件,以迫使浏览器重新加载:

确保网页没有在所有浏览器上缓存。

如果你在SO上搜索“缓存头”或类似的东西,你会发现ASP。NET特定的示例。

另一种不太清晰但有时是唯一的方法,如果你不能控制服务器端的头,就是给被调用的资源添加一个随机的GET参数:

myimage.gif?random=1923849839

其他回答

有一个小技巧可以使用。诀窍是在脚本标记中向文件名附加一个参数/字符串,并在文件更改时更改它。

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

浏览器将整个字符串解释为文件路径,即使“?”后面的是参数。所以现在发生的是,下次当你更新你的文件时,只要改变你网站上script标签中的数字(示例<script src="myfile.js?version=1.0.1"></script>),每个用户的浏览器都会看到文件已经改变,并抓取一个新的副本。

这是我在一个使用PHP的应用程序中使用的简单解决方案。

所有JS和CSS文件都放在一个有版本名的文件夹中。示例:"1.0.01"

root\1.0.01\JS
root\1.0.01\CSS

在那里创建一个Helper并定义版本号

<?php
function system_version()
{
    return '1.0.07';
}

和链接JS和SCC文件如下

<script src="<?= base_url(); ?>/<?= system_version();?>/js/generators.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="<?= base_url(); ?>/<?= system_version(); ?>/css/view-checklist.css" />

每当我对任何JS或CSS文件进行更改时,我都会在Helper中更改System Verson并重命名文件夹并部署它。

除了设置Cache-control: no-cache,如果你想每次刷新本地副本,你还应该将Expires头设置为-1(某些版本的IE似乎需要这样做)。

查看HTTP缓存-与服务器检查,始终发送If-Modified-Since

我有一个案例,我将在线拍摄客户端的照片,如果照片被更改,就需要更新div。浏览器仍然显示着旧照片。因此,我使用了调用随机GET变量的方法,该变量每次都是唯一的。这就是它,如果它能帮助到任何人的话

<img src="/photos/userid_73.jpg?random=<?php echo rand() ?>" ...

编辑 正如其他人指出的那样,下面是更有效的解决方案,因为它只会在图像被更改时重新加载图像,通过文件大小识别这种更改:

<img src="/photos/userid_73.jpg?modified=<? filemtime("/photos/userid_73.jpg")?>"

如果这是关于.css和.js的更改,那么一种方法是通过在每个版本的文件名后面附加类似“_versionNo”的东西来“缓存破坏”。例如:

script_1.0.css // This is the URL for release 1.0
script_1.1.css // This is the URL for release 1.1
script_1.2.css // etc.

或者在文件名后面:

script.css?v=1.0 // This is the URL for release 1.0
script.css?v=1.1 // This is the URL for release 1.1
script.css?v=1.2 // etc.

您可以检查这个链接,看看它是如何工作的。