没有过期标头发送,内容缓存,浏览器发出条件GET请求多长时间?

Mic*_*ken 32 browser caching cache-control

假定浏览器默认设置,并且内容在没有过期标头的情况下发送.

  1. 用户访问网站,浏览器缓存图像等
  2. 用户不会关闭浏览器或刷新页面.
  3. 用户继续正常冲浪网站.
  4. 假设浏览不会出于任何原因转储缓存.

浏览器将在用户浏览时缓存图像等,但不清楚何时会发出条件GET请求以询问内容新鲜度(除了刷新页面).如果这是一个特定于浏览器的设置,我在哪里可以看到它的价值(对于浏览器:safari,IE,FireFox,Chrome).

[编辑:是的 - 我知道你应该总是发送过期标题.但是,这项研究旨在了解浏览器如何使用没有过期标题的内容.]

Pet*_*art 22

HTTP缓存规范(第13.4节):除非受到缓存控制(第14.9节)指令的特别约束,否则缓存系统可能总是将成功的响应(参见第13.8节)存储为缓存条目,如果没有验证,则可以返回它.它是新鲜的,并且可以在成功验证后返回它.这意味着如果没有发送缓存控制头,则用户代理可以随心所欲地执行任何操作.大多数浏览器使用用户设置和启发式的组合来确定在这种情况下是否(以及多长时间)缓存.


Jon*_*ram 10

HTTP/1.1定义了一系列缓存机制; 该expires标头仅是一个,还存在的cache-control报头.

要直接回答您的问题:对于没有expires标头返回的资源,您必须考虑返回的cache-control指令.

HTTP/1.1没有为没有缓存相关标头的资源定义缓存行为.如果使用no cache-controlexpiresheaders 发送资源,则必须假定客户端将在下次请求相同资源时发出常规(非条件)请求.

任何偏离此行为的行为都会使客户端认为不是完全一致的HTTP客户端,在这种情况下,问题就变成:不符合要求的HTTP客户端会出现什么样的行为?没有办法回答这个问题.

HTTP缓存很复杂,要完全理解一致客户端在给定方案中应该做什么,阅读并理解HTTP缓存规范.

  • 第三段实际上是不正确的.从引用的缓存规范(第13.4节):除非受到缓存控制(第14.9节)指令的特别约束,否则缓存系统总是可以将成功的响应(参见第13.8节)存储为缓存条目,如果缓存条目可以返回,如果它是新鲜的,并且可以在成功验证后返回它.这意味着如果没有发送缓存控制头,则用户代理可以随心所欲地执行任何操作.大多数浏览器使用用户设置和启发式的组合来确定在这种情况下是否(以及多长时间)缓存. (25认同)
  • 看来,当浏览器缓存已满时,它开始使用其缓存逐出算法。在此之前-只有刷新命令或浏览器会话结束将导致它再次请求这些表示。 (2认同)