gpt4 book ai didi

http - 与响应头相比,缓存控制在请求头中的效果如何

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:25:11 24 4
gpt4 key购买 nike

我知道如果我得到的响应包含一个 header Cache-Control:max-age=100,这意味着缓存的新鲜度生命周期为 100 秒。这是否意味着在 100 秒内,后续请求将永远不会请求服务器?所有这些请求都只是在缓存中收到响应?

因此我有一个疑问,如果后续请求包含一个头Cache-Control:no-cache或者Cache-Control:max-age=0,会不会即使缓存没有过时,在 100 秒内向原始服务器请求?

最佳答案

这是否意味着在 100 秒内,后续请求将永远不会请求服务器?所有这些请求都只是在缓存中收到响应?

除非后续请求使用Cache-Control用于对缓存进行更多控制的 header ,是的,请求只会从缓存中获取响应数据。

如果后续请求包含头Cache-Control:no-cacheCache-Control:max-age=0 ,它会在 100 秒内向原始服务器请求,即使缓存没有过时吗?

是的,它将向原始服务器发送 HTTP 请求。 Cache-Control:no-cache在请求 header 中表示:“除非重新验证资源,否则浏览器不会从缓存中接受它”。 Cache-Control:max-age=<n>在请求 header 中表示:“浏览器不会接受任何超过 n 秒的缓存”——当 n 为 0 时,浏览器将始终向服务器发送请求。

这是一个简单的实验。

在浏览器中:

var poll = function() {
$.ajax({
url: '/poll',
beforeSend: function(xhr) {
//xhr.setRequestHeader('Cache-Control', 'no-cache');
//xhr.setRequestHeader('Cache-Control', 'max-age=0');
},
success: function(){
setTimeout(poll, 5000);
}
});
}
poll();

在服务器中:

http.createServer(function(req,res) {
...
// if request path is /poll
res.setHeader('Cache-Control', 'max-age=18');
res.end();
})

你可以观察到:

  1. 何时/poll请求不包含 Cache-Control header ,浏览器将请求发送到源服务器,从缓存中获取资源用于接下来的 3 个请求,然后再次发送请求到源服务器...
  2. 何时/poll请求的“Cache-Control” header 为 no-cachemax-age=0 , 浏览器将始终向源服务器发送请求。

请注意,在 Chrome 上执行此实验时,您需要取消选中 Disable cache在 DevTool 中。

关于http - 与响应头相比,缓存控制在请求头中的效果如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43424565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com