我使用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
。
但是当状态代码为
(from memory cache)
时,为什么我的 Chrome 网络选项卡显示下载文件的大小而不是显示 304 Not Modified
?
我希望如果文件未修改,则从缓存加载文件,如果修改,则从服务器提供服务。
感谢任何帮助和指导。
@sBanda 很好地描述了情况。预计会收到 304,因为指定的
cache-control
策略将文件声明为过时的,但 ETag 检查显示它尚未更改。
因此您得到 304,因为您可能没有请求特定资源,但您却这样做了,浪费了带宽和 CPU 负载。
为了避免这种情况,你应该做的是这样的:
const express = require('express')
const server = express()
const oneHour = 3_600_000 // 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)