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

Caching 未发送过期标头,缓存内容,浏览器发出条件GET请求需要多长时间?,caching,browser,cache-control,Caching,Browser,Cache Control,采用浏览器默认设置,发送内容时不带标题 用户访问网站,浏览器缓存图像等 用户不关闭浏览器或刷新页面 用户继续正常浏览网站 假设浏览没有出于任何原因转储缓存 浏览器会在用户浏览时缓存图像等,但不清楚何时会发出条件GET请求,询问内容新鲜度(除了刷新页面)。如果这是特定于浏览器的设置,我在哪里可以看到它的值(适用于safari、IE、FireFox、Chrome等浏览器) [编辑:是-我知道您应该始终发送expires标头。但是,本研究旨在了解浏览器如何处理不带expires标头的内容。]除非您发送

采用浏览器默认设置,发送内容时不带标题

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


    [编辑:是-我知道您应该始终发送expires标头。但是,本研究旨在了解浏览器如何处理不带expires标头的内容。]

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

    HTTP/1.1定义了缓存机制的选择;
    expires
    头只有一个,还有
    缓存控制

    直接回答您的问题:对于没有<代码>返回的资源 页眉,必须考虑返回的<代码>缓存控制< /COD>指令。 HTTP/1.1为没有缓存相关头的资源定义了无缓存行为。如果发送资源时没有

    缓存控制
    过期
    头,则必须假设客户端在下次请求相同资源时会发出常规(无条件)请求

    任何偏离此行为的行为都会将客户端视为不完全一致的HTTP客户端,在这种情况下,问题会变成:不一致的HTTP客户端会出现什么行为?没有办法回答这个问题


    HTTP缓存非常复杂,要完全理解一致性客户端在给定场景中应该做什么,请阅读并理解(第13.4节):除非受到缓存控制(第14.9节)指令的特别约束,否则缓存系统可能始终存储成功响应(见第13.8节)作为缓存项,如果缓存项是新的,则可以在未经验证的情况下返回,并且可以在验证成功后返回。这意味着,如果未发送缓存控制标头,则用户代理可以自由执行任何操作。大多数浏览器使用用户设置和启发式组合来确定是否(以及多长时间)在这种情况下进行缓存。

    感谢lukiffer的回答,但我特别询问了用户不刷新页面的情况(上面的第2项)。如果用户不关闭或刷新页面,HTTP客户端就不需要重新请求该页面上的资源。嘿,Jon,使用第3点-如果用户继续正常浏览网站,可能需要使用images/css/js。据我所知,浏览器通常会在会话的基础上转储缓存,但不会执行条件获取请求,除非用户点击刷新(即使在浏览到已找到缓存图像的新页面时)@迈克尔:知道这一点很有意思,如果有一天你能把你找到的东西写下来那就太好了!看起来当浏览器缓存满时,它开始使用缓存逐出算法。在那之前,只有刷新命令或浏览器会话结束时,它才会再次请求这些表示。第三段实际上是in根据参考的缓存规范(第13.4节):除非受到缓存控制(第14.9节)指令的特别约束,否则缓存系统可能始终存储成功响应(见第13.8节)作为缓存项,如果缓存项是新的,则可以在未经验证的情况下返回,并且可以在验证成功后返回。这意味着,如果未发送缓存控制标头,则用户代理可以自由执行任何操作。大多数浏览器使用用户设置和启发式组合来确定是否(以及多长时间)在这种情况下进行缓存。@PeterHart将投票赞成,如果你把它作为一个答案,一个很好的实用答案是: