首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs express应用未通过HTTPS发送last-modified/exires报头

Nodejs express应用未通过HTTPS发送last-modified/exires报头
EN

Stack Overflow用户
提问于 2020-07-24 20:03:27
回答 1查看 355关注 0票数 0

我已经通过google cloud的app引擎部署了一个node-express后端app。

我正在通过它提供一些文件,我正在尝试适当地设置缓存为典型的访问加1周,但添加最后修改的文件实际修改,让浏览器知道它必须重新下载它…

下面是我设置标题的方法

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-11-16 03:13:13

这似乎是设计上的标准行为,因为所有的时间戳在app-engine部署时都是零的。请参阅:https://issuetracker.google.com/issues/168399701

我通过不设置etag和last-modified标头解决了这个问题。例如:

代码语言:javascript
复制
app.use("/", express.static(root, { etag: false, lastModified: false }));

或者对于单个文件:

代码语言:javascript
复制
app.get("/*", async (req, res) => {
  return res.sendFile("index.html", { root, lastModified: false, etag: false });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63073175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档