【问题标题】:Is it necessary to cache bust in HTTP/2?是否有必要在 HTTP/2 中缓存半身像?
【发布时间】:2016-09-09 01:33:05
【问题描述】:

在 HTTP/1 中,为避免额外的网络请求决定资源是否应保持缓存,我们将在静态资产上设置较高的 max-ageExpires 值,并为每个修订版提供唯一的 URL。但是在 HTTP/2 中,请求很便宜,所以我们可以在不破坏缓存的情况下,只依赖 ETags、last-modified 等吗?

我可以看到继续破坏缓存的唯一优势(除了双重服务 HTTP/1 和 HTTP/2 客户端之外)是在资源过期时节省带宽检查。即使这对于 HPACK 来说也可能无关紧要。那么我是否遗漏了什么,或者我现在可以停止缓存清除了吗?

【问题讨论】:

    标签: caching http2


    【解决方案1】:

    “必要”部分取决于您对性能的感受有多极端。简而言之,如果您可以忍受三到四次往返,则不需要缓存破坏。否则,缓存破坏仍然是删除它们的唯一方法。

    这里有一些与 HTTP/2 与 HTTP/1.1、延迟问题以及 HTTP/2 Push 的使用相关的争论。

    HTTP/2 请求不是即时的

    • HTTP/2 请求比 HTTP/1.1 便宜,但也不算多。在 HTTP/1.1 中,一旦浏览器打开到服务器的 6 到 8 个 TCP 连接,它就有 6 到 8 个通道进行重新验证。在某些 TCP 丢包率高、延迟高的场景下,尤其是在 TCP 慢启动为王的连接开始时,HTTP/1.1 的多个 TCP 套接字比单个 HTTP/2 TCP 连接工作得更好。 HTTP/2 很好,但不是灵丹妙药。

    • HTTP/2 连接仍有网络延迟。我们一直在为我们网站 (It can be measured using HTTP/2 Ping) 的访问者平均往返时间 (RTT),因为不是每个人都与我们的服务器在同一个区块中,所以我们的平均 RTT 在 200 到 280 毫秒之间。 304 重新验证将花费 1 RTT。在不使用资产连接的站点中,资产树的每个新级别都将花费更多的 RTT。

    HTTP/2 Push 可以为您节省尽可能多的 RTT,同时还可以很好地使用缓存。但是有一些问题,请继续阅读!

    HTTP/2 Push 最适合缓存清除

    理想的情况是服务器不推送新资源,而是推送自客户端上次访问以来发生变化的所有内容。

    • 如果浏览器认为资源是新鲜的(例如,因为max-age),它会拒绝或不对该资源使用任何推送。这使得无法使用 HTTP/2 Push 刷新浏览器认为新鲜的资产。

    • 由于浏览器中存在一个广泛存在的错误,无法推送 304 重新验证。这些将需要一个小的max-age

    因此,将 RTT 保持在最低限度、不推送浏览器已有的任何内容并仍然能够推送资产的新版本的唯一方法是使用缓存清除,即为新版本的资产。

    另见

    Url query parameters are still needed to update assets at clients

    Interactions with the browser's cache

    【讨论】:

    • 好答案。还需要考虑对服务器的影响。 304 生成静态资源的成本很低,但不是免费的(动态资源的持续再生可能非常昂贵)。在此处查看 Firefox 的有趣新功能:bitsup.blogspot.ie/2016/05/cache-control-immutable.html?m=1 Facebook 要求减少服务器负载和客户端负载。
    • 感谢您提请我注意此功能!我希望其他浏览器也采用这一点,能够通过缓存清除将资产标记为不可变当然是有意义的。
    • @BazzaDP 有趣的帖子。虽然我想知道 304 的成本和 Cache-Control: immutable 的优势是否主要适用于 HTTP/1 服务器。 (我猜不是,因为 Facebook 似乎在使用 HTTP/2。)
    • 正如您所说,Facebook 是 HTTP/2,这仅在最新版本的 Firefox(也支持 HTTP/2)中,所以不,我不这么认为。但是,即使客户端发出这些 304 请求的成本为零(事实并非如此!),服务器也必须处理和服务这些 304。对于像 Facebook 这样受欢迎的网站来说,这尤其昂贵,但您的网站也是如此。每次有人为某些不会改变的源点击刷新时,为该 304 服务确实没有任何好处。这就是我的观点,关于 immutable 的帖子只是进一步证实了这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    • 2012-09-23
    • 2018-09-03
    • 2020-07-25
    • 1970-01-01
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多