我使用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");
} }));
请求标头随If-None-Match
和If-Modififed-Since
一起发送,如果我在不修改文件的情况下重新加载页面,我还可以在Chrome的响应中看到304 Not Modified
。如果我修改其中一个文件,我会得到200 OK
。
但为什么我的Chrome网络标签会显示已下载文件的大小,而不是在状态代码为(from memory cache)
时显示304 Not Modified
?
如果文件没有被修改并且如果被修改则从服务器提供,我期待文件从缓存加载。
感谢任何帮助和指导。
答案 0 :(得分:8)
cache-control
策略将文件声明为陈旧,但预期接收304,但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);
答案 1 :(得分:4)