use*_*540 6 etag http cache-control http-caching browser-cache
我知道这个问题有好几次了.但我仍然不清楚这个概念.在SO中阅读了很多博客和答案后,我得到的是,
Expiry headers are used when you don’t even want client (and proxies/caches) to make a request to
the server. In ETAG, the client will check with the server for the update, but in expiry
headers, the client will know, when to expire the file and check for an update, till then it
(browsers and proxies/caches) won’t bother server for checking the update.
Run Code Online (Sandbox Code Playgroud)
所以基本上它说如果我们使用expires/max-age标头,它甚至不会检查服务器是否有更新的文件.所以我想在本地进行测试.
所以我创建了简单的html文件,包括2个js文件和1个图像文件.在IIS中,我已将图像文件夹的Expires标头设置为2天.因此,根据我的理解,在从服务器获取图像文件一次后,对于下一个请求,它不应该向服务器发送请求以检查图像文件是否被修改.
但我得到的是每次刷新页面时,我看到发送到服务器的请求,服务器返回304 not modified
状态.但根据我阅读的规格/博客它不应该向服务器发送请求.
有人请解释一下.
对于你所描述的情况
很明显,通过使用字段和值ETag
响应304 not modified
请求,可以按预期工作。If-None-Match
ETag
因此,现在浏览器将从缓存加载图像,而不是从服务器获取新图像,从而消耗带宽和时间。
您的浏览器似乎禁用了缓存。这就是为什么在缓存过期之前发送了新请求,否则一开始就不会发送请求。
这是一篇精彩的文章,解释了如何以编程方式查找浏览器中禁用的缓存
这是另一篇精彩的文章,深入解释了缓存和Etag 。
笔记:
一般来说,如果您使用多个带有负载均衡器的服务器来托管您的网站,那么简单的 Etag 配置可能会通过在标头中包含 Etag 来消耗更多带宽,并且它没有检查浏览器缓存是否有效的目的。(它总是会说无效)
归档时间: |
|
查看次数: |
1640 次 |
最近记录: |