【问题标题】:HTTP/2 Server Push and Browser CacheHTTP/2 服务器推送和浏览器缓存
【发布时间】:2019-05-24 21:34:02
【问题描述】:

我阅读了一些关于 HTTP/2 服务器推送的文档。

一位博主说:

但是,服务器推送有一个非常头疼的问题。如果浏览器已经缓存了要推送的资源文件,推送只是浪费带宽。

另一个人说:

由于服务器推送会将资产作为不同的 HTTP 对象(每个都有自己的 Cache-Control 标头)发送到客户端,因此它们可以像其他任何东西一样被浏览器缓存。

我的问题是,HTTP/2 Push 和浏览器缓存都运行良好?或者如果我为某些资产启用了 HTTP/2 推送功能,浏览器缓存将不会对这些资产起作用?

【问题讨论】:

    标签: server push browser-cache http2


    【解决方案1】:

    如果你推送了一个资源,页面需要使用它,它会被保存到浏览器缓存中,以备下次使用。

    问题在于如果您更改资源,然后再次推送它,但旧版本已经在浏览器缓存中并且缓存控制标头说它仍然有效,那么浏览器将使用旧缓存版本,尽管您已经推送了更新的版本。所以这是浪费时间。

    关于它的好博文 herehere 以及即将发布的 Chapter 5 of my book 也涵盖了这一点。

    【讨论】:

    • 谢谢@Barry Pollard,我只会在html中推送组合css。所以我将通过 Cloudflare Rocket Loader 推迟其他资产,如 js、woff2、图像。如果我这样做,我的网页将在 350 毫秒内加载。如果我不这样做,页面将在 300-600 毫秒之间加载。对此,我真的非常感激!再次感谢您!
    • 好的,但是如果你再次访问该页面,那么你真的应该尽量避免再次推送。您可以使用基于 cookie 的方法来执行此操作:tunetheweb.com/performance/http2/http2-push
    • 哦,我正在使用 Cloudflare“缓存所有内容”规则。所以cookie会被CF覆盖。 @BarryPollard 所以我猜我不能使用这个推送功能......
    • 什么是“浪费推送”?除了几十个字节的标头之外,没有任何浪费。
    • 如果你推你推头和身体。理论上,在获得 PUSH_PROMISE 帧后,浏览器可以取消它并说“不,谢谢 - 已经收到了”,但实际上资源已经发送并且正在发送中,因此客户端可以获得水推送的全部成本。
    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 2017-09-06
    • 2010-12-29
    • 2016-07-08
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    相关资源
    最近更新 更多