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

时间:2011-05-02 17:21:31

标签: caching browser cache-control

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

  1. 用户访问网站,浏览器缓存图片等。
  2. 用户不会关闭浏览器或刷新页面。
  3. 用户继续正常浏览网站。
  4. 假设浏览不会因任何原因转储缓存。
  5. 浏览器将在用户浏览时缓存图像等,但不清楚它何时会发出条件GET请求以询问内容新鲜度(除了刷新页面)。如果这是一个特定于浏览器的设置,我在哪里可以看到它的值(对于浏览器,如:safari,IE,FireFox,Chrome)。

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

3 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:10)

HTTP / 1.1定义了一系列缓存机制; expires标题只是一个,还有cache-control标题。

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

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

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

HTTP缓存非常复杂,要完全了解一致客户端在给定方案中应该做什么,请阅读并理解HTTP caching spec

答案 2 :(得分:4)

除非您发送过期标头,否则大多数浏览器将为每次后续刷新发出GET请求,并且将获得HTTP 200 OK(它将再次下载内容)或HTTP 304 Not Modified(并使用缓存中的数据)。

相关问题