1

我试图强制浏览器永久缓存 CSS、图像、js 等不同的资源。对于浏览器来说,永远不要尝试刷新图像/css 非常重要,因为在一个页面上可能有数千个小图像,并且当浏览器尝试刷新它时会轰炸服务器,并且不必要地将页面保持在刷新模式。除非请求路径改变,否则图像/css 永远不会改变。

现在,我将图像/css 的路径设置为带有如下 URL 的脚本:

"http://example.com/img/get.php?n=someimage.jpg&v=7"

并且脚本在发送资源之前发送这些标头:

header("Cache-Control: public");
header("Expires: Tue, 19 Jan 2037 00:00:00 GMT");
header("Last-Modified: Sat, 01 Jan 2000 00:00:00 GMT");

但是,如果点击 Refresh 按钮,Chrome 和 Firefox 都会重新请求图像/css。如果您在地址栏上按 Enter,Chrome 似乎也会发送请求,这与 Firefox 不同。

我的问题是他们为什么要这样做,因为 Expires 标头应该使它在 2037 年之前不会再次发出请求,即使用户按下刷新也是如此。我做错了什么,还是错过了什么?

4

1 回答 1

4

你不能。如您所见,一些浏览器将“刷新”定义为“刷新并将缓存刷新到”。

服务器只能为 Web 浏览器提供关于缓存的指导,他们不能强制执行。

于 2010-12-21T23:36:25.430 回答