http缓存实际上应该如何工作?
我知道这其实是一件老事情,但我真的有问题,关于这件事,以及它开始时应该如何工作。因此,我至少可以将这四个重要的缓存头发送回客户端(http缓存实际上应该如何工作?,http,http-headers,browser-cache,Http,Http Headers,Browser Cache,我知道这其实是一件老事情,但我真的有问题,关于这件事,以及它开始时应该如何工作。因此,我至少可以将这四个重要的缓存头发送回客户端(Last Modified,cache Control,Expires和ETag) 问题2.2的示例情况: 比如说我有一些文章的网站。 每15分钟到7天可能会有一篇新文章。 所以我将Cache Control和Expires设置为缓存15分钟,以便客户端始终获得它的最新版本 目前我对ETag和上次修改的的看法: 我只是在那里放了一些内容的散列,如果没有匹配,我可以发送
Last Modified
,cache Control
,Expires
和ETag
)
问题2.2的示例情况:
比如说我有一些文章的网站。
每15分钟到7天可能会有一篇新文章。
所以我将Cache Control
和Expires
设置为缓存15分钟,以便客户端始终获得它的最新版本
目前我对ETag
和上次修改的的看法:
我只是在那里放了一些内容的散列,如果没有匹配,我可以发送客户端304
ifif==ETag
如果自上次修改以来进行了修改,我可以发送客户端304
问题
我是否需要缓存控制
和过期
来支持所有浏览器
它看起来像是Cache Control
和Expires
只告诉我的浏览器内容应该在计算机上缓存多长时间,对吗?
- 所以我只能使用
ETag
和Last Modified
来确定何时应该发送304
,对吗
- 所以我可以将
Cache Control
和Expires
设置为永久,如果ETag
或Last Modified
更改了,就向客户端发送新版本?
- 因为这在我的浏览器中有效,但在所有浏览器中都有效吗
我是否需要ETag
和上次修改的来支持所有浏览器
Pragma
看起来像另一个类似于cache Control
的缓存头,哪些浏览器正在使用Pragma
,我需要它吗
我是否需要缓存控制
和过期
来支持所有浏览器
缓存控制
在HTTP 1.1中引入,因此仅在支持HTTP 1.1的客户端上受支持<代码>过期
自HTTP 1.0起受支持。如果两者都指定,则缓存控制
优先,而过期
将被完全忽略
它看起来像是Cache Control
和Expires
只告诉我的浏览器内容应该在计算机上缓存多长时间,对吗
基本上,是的。如果缓存控件
不存在(因此将使用过期
),或使用最大年龄设置为正确
因此,我只能使用ETag
和Last Modified
来确定何时发送304,对吗
在这里,你的问题开始令人困惑。实际上,如果没有匹配的
,则需要检查;如果修改了,则需要检查,因为
标题。通常,浏览器在条件GET请求中只发送其中一个,如果它与服务器中的当前值ETag
或Last Modified
匹配,则返回304以及ETag
头。请注意,若浏览器出于某种原因发送了这两个文件,那个么在修改后,您可以忽略
所以我可以将Cache Control
和Expires
设置为永久,如果ETag
或Last Modified
更改了,就向客户端发送新版本
否。如果将其设置为“永久”,则在最终用户按下(Ctrl)+F5键之前,客户端将永远不会发送(有条件的)请求。您需要将缓存控制:max age
或Expires
设置为所需的缓存时间(将来可能设置为15分钟)
因为这在我的浏览器中有效,但在所有浏览器中都有效吗
注意测试方式:按F5键将始终发送条件GET请求。但一个简单的页面到页面导航和表单提交(就像在现实世界中一样)不会发送有条件的GET请求!按Ctrl+F5将忽略缓存并发送一个全新的GET请求
我是否需要ETag和Last Modified来支持所有浏览器
所有浏览器都支持两者。如果从服务器接收到ETag,并且浏览器需要执行条件GET请求,则浏览器需要通过将ETag发送回(如果不匹配)。
。上次修改的是可选的,通常只有在资源上没有ETag
时才会发送。另见
Pragma看起来像另一个类似于cache-Control的缓存头,哪些浏览器正在使用Pragma,我需要它吗
如果要缓存,则不需要它。只有在不想缓存的情况下才需要它(为了覆盖HTTP 1.0客户机/代理,尽管其数量目前正在稳步下降)
如果您熟悉Java,或者至少能够破解它,那么您可能会发现本文很有帮助:
另见:
所以如果缓存控制
说缓存版本可以使用,浏览器甚至不会发送HTTP请求,对吗?因此,只有当缓存控制
指出缓存版本已过时时,才会发送HTTP请求,但如果服务器响应304,浏览器仍将使用缓存版本,对吗?如果这两个问题都是正确的,那么当max age=0
或仅当它至少是max age=1
时,响应是否会被缓存(本地)?(因此,当服务器以304响应时,可以使用某个内容。)这是正确的。请注意,除非您将更新的缓存控制
或过期
标头与304一起发送回,否则浏览器将继续发送有条件的GET请求,304基本上会延迟缓存。