【发布时间】:2021-06-10 14:39:55
【问题描述】:
我在 Node js 中有一个带有 Express js 的服务器,我从服务器发送以下 Cache-Control 值 max-age=50,(我希望它有 50 秒的新鲜度,这个值仅用于测试) :
server.get('/data', (_, res) => {
res.set('Cache-Control', 'max-age=50');
res.json({
msg: 'Hola',
});
});
我从客户端分配了 max-stale 或 min-fresh 或 max-age,但它似乎对缓存行为没有影响:
document.getElementById('btn-get-data').addEventListener('click', () => {
fetch('http://localhost:4000/data', {
headers: {
'Cache-Control': 'max-stale=50',// <-- I also tried max-age and min-fresh
},
})
.then((res) => res.json())
.then((json) => {
console.log(json);
})
.catch((error) => console.log(error));
});
例如,我模拟客户端失去互联网连接(离线),缓存仍然是新鲜的,因为我分配了 50 秒,但是当缓存到期时,它不会继续使用或服务过时的缓存,即使我指定它将使用来自客户端的max-stale=50。
我尝试了 max-age 和 min-fresh 但我没有看到任何缓存行为。文档说:
最大年龄 表示客户端愿意接受年龄不大于指定时间(以秒为单位)的响应。除非 maxstale 指令也包括在内,否则客户端不愿意接受过时的响应。 最新鲜 表示客户端愿意接受其新鲜度不小于其当前年龄加上指定时间(以秒为单位)的响应。也就是说,客户端希望响应至少在指定的秒数内仍然是新鲜的。 最大陈旧 表示客户端愿意接受已超过其过期时间的响应。如果为 max-stale 分配了一个值,则客户端愿意接受已超过其过期时间不超过指定秒数的响应。如果没有为 max-stale 分配值,则客户端愿意接受任何年龄的陈旧响应。
但它不起作用。这三个标头如何从客户端工作?我是不是误会了?有人可以用简单或冗长的词来解释这个标题以及如何从客户那里分配它们吗?
【问题讨论】:
标签: node.js express caching http-headers cache-control