我已经通过google cloud的app引擎部署了一个node-express后端app。
我正在通过它提供一些文件,我正在尝试适当地设置缓存为典型的访问加1周,但添加最后修改的文件实际修改,让浏览器知道它必须重新下载它…
下面是我设置标题的方法
res.set({
'Content-disposition' : 'inline',
'Content-Type' : type,
'Cache-Control' : 'public, max-age=604800, s-maxage=604800',
'expires' : new Date(updated).toUTCString(),
'Last-Modified' : new Date(updated).toUTCString()
})当我尝试通过任何浏览器或邮递员访问资源时,我总是得到错误的Last-Modified
发送的日期似乎是创建日期,所以我调试以检查“更新”是否正确。
在尝试调试一些不同的东西时,我注意到一些奇怪的事情……它可以通过http正常工作,但不能通过https...
这是怎么回事?
Express是通过普通的http提供服务的,因为它只能在GAE docker中访问...因此,这一定是一些奇怪的GAE问题,或者是我不知道浏览器如何处理缓存的问题?(但话又说回来,连邮递员的行为都是一样的)
编辑:来自不同设备的更多测试揭示了另一个提示,它不仅仅是Last-Modified,而是整个标题。如果我通过https访问,它只是完全跳过整个标头,并获取最后一个请求标头,将状态变为304,直到max-age过期
清除缓存也适用于http,但不适用于https
发布于 2020-11-16 03:13:13
这似乎是设计上的标准行为,因为所有的时间戳在app-engine部署时都是零的。请参阅:https://issuetracker.google.com/issues/168399701
我通过不设置etag和last-modified标头解决了这个问题。例如:
app.use("/", express.static(root, { etag: false, lastModified: false }));或者对于单个文件:
app.get("/*", async (req, res) => {
return res.sendFile("index.html", { root, lastModified: false, etag: false });
});https://stackoverflow.com/questions/63073175
复制相似问题