快速静态服务器caching控制max-age = 0,必须重新validation

我已经使用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-MatchIf-Modififed-Since发送请求标题,如果我在不修改文件的情况下重新加载页面,我也可以在Chrome中的响应中看到304 Not Modified 。 如果我修改其中一个文件,我会得到一个200 OK

但是,为什么我的Chromenetworking选项卡显示的是下载的文件的大小,而不是在状态码304 Not Modified时说(from memory cache)

我期待如果文件没有被修改,并从服务器提供服务(如果修改),则从caching中加载文件。

感谢任何帮助和指导。

@sBanda描述的情况非常好。 由于指定的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); 

资源

当浏览器将某些内容放入caching中时,它还会从服务器存储Last-Modified或ETag标头。 这个标签然后用来发送一个请求,如果该内容仍然具有该ETag,则If-Modified-Since或If-None-Match头巫婆实际上告诉服务器发送304。

在你的情况下,Chrome正在请求服务器使用它的caching,这里有一个老的post解释这个。

你可能想看看这个网站关于通过HTTPcaching头增加应用程序的性能。