使用 max-age=0,must-revalidate 表示静态服务器缓存控制
Express static server cache control with max-age=0,must-revalidate
我已经使用 express 设置了一个简单的静态服务器。
var location = path.join(__dirname, 'public');
app.use(express.static(location, { cacheControl: true, setHeaders: function(res, path) {
res.setHeader("Cache-Control","max-age=0,must-revalidate");
} }));
请求 header 与 If-None-Match
和 If-Modififed-Since
一起发送,如果我重新加载页面,我还可以在 Chrome 的响应中看到 304 Not Modified
无需修改文件。如果我修改其中一个文件,我会得到 200 OK
。
但是,为什么我的 Chrome 网络选项卡显示的是下载文件的大小,而不是在状态代码为 304 Not Modified
时显示 (from memory cache)
?
我希望文件在未修改的情况下从缓存中加载,并在修改后从服务器提供。
感谢任何帮助和指导。
当浏览器将某些内容放入缓存时,它还会存储来自服务器的 Last-Modified 或 ETag header。然后使用此标记发送带有 If-Modified-Since 或 If-None-Match header 的请求,实际上告诉服务器如果内容仍然具有该 ETag 则发送 304。
在你的情况下 Chrome 正在请求询问服务器是否应该使用它的缓存
有一个旧的 post 解释这个 here。
您可能想查看此 website 关于通过 HTTP 缓存提高应用程序性能的内容 Headers。
@sBanda 描述的很好。收到 304 是预期的,因为指定的 cache-control
策略将文件声明为过时的,但 ETag 检查显示它没有更改。您得到 304 是因为您可能没有请求特定资源,但您却请求了,浪费带宽和cpu负载。
你应该做些什么来避免它是这样的:
const express = require('express');
const server = express();
const oneHour = 3600000; // 3600000msec == 1hour
server.use(express.static('www', { maxAge: oneHour })); // Client-side file caching
server.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
server.listen(8080);
我已经使用 express 设置了一个简单的静态服务器。
var location = path.join(__dirname, 'public');
app.use(express.static(location, { cacheControl: true, setHeaders: function(res, path) {
res.setHeader("Cache-Control","max-age=0,must-revalidate");
} }));
请求 header 与 If-None-Match
和 If-Modififed-Since
一起发送,如果我重新加载页面,我还可以在 Chrome 的响应中看到 304 Not Modified
无需修改文件。如果我修改其中一个文件,我会得到 200 OK
。
但是,为什么我的 Chrome 网络选项卡显示的是下载文件的大小,而不是在状态代码为 304 Not Modified
时显示 (from memory cache)
?
我希望文件在未修改的情况下从缓存中加载,并在修改后从服务器提供。
感谢任何帮助和指导。
当浏览器将某些内容放入缓存时,它还会存储来自服务器的 Last-Modified 或 ETag header。然后使用此标记发送带有 If-Modified-Since 或 If-None-Match header 的请求,实际上告诉服务器如果内容仍然具有该 ETag 则发送 304。
在你的情况下 Chrome 正在请求询问服务器是否应该使用它的缓存 有一个旧的 post 解释这个 here。
您可能想查看此 website 关于通过 HTTP 缓存提高应用程序性能的内容 Headers。
@sBanda 描述的很好。收到 304 是预期的,因为指定的 cache-control
策略将文件声明为过时的,但 ETag 检查显示它没有更改。您得到 304 是因为您可能没有请求特定资源,但您却请求了,浪费带宽和cpu负载。
你应该做些什么来避免它是这样的:
const express = require('express');
const server = express();
const oneHour = 3600000; // 3600000msec == 1hour
server.use(express.static('www', { maxAge: oneHour })); // Client-side file caching
server.get('/', function(req, res) {
res.sendFile(__dirname + '/index.html');
});
server.listen(8080);