【问题标题】:With HTTP/2 Push, can I push assets before the initial response?使用 HTTP/2 Push,我可以在初始响应之前推送资产吗?
【发布时间】:2020-04-26 10:24:26
【问题描述】:

我有一个包含 JS、CSS 和字体资源的网页。在确定其响应的 HTTP 状态代码和标头之前,该页面必须进行一些繁重的处理。

我想使用 HTTP/2 Push 将资产发送到浏览器,而无需等待繁重的处理。时间线如下所示:

  1. 客户端请求index.html
  2. 服务器为script.jsstyles.cssfont.woff2发送PUSH_PROMISES
  3. 服务器为上述资产发送 HTTP 标头和数据
  4. 服务器执行一些繁重的处理以确定index.html 响应...
  5. 服务器为index.html 发送HTTP 标头和数据

这可能吗?根据我对Server Push in the HTTP/2 spec 的理解,这似乎是可能的。但是,这是我第一次深入研究 HTTP/2 规范,所以我肯定会遗漏一些东西。

【问题讨论】:

    标签: http2 server-push


    【解决方案1】:

    是的,这是完全允许的,例如在 Apache 中是可能的,详见此处:https://icing.github.io/mod_h2/earlier.html

    或者这里给出一个 Node 的例子:https://github.com/bazzadp/http2-in-action/blob/master/Listing%205.3/app.js

    其他服务器也可能允许这样做,但许多服务器使用预加载 HTTP 标头作为推送信号,因此需要将响应发送回以显示标头。

    一个额外的103 Early Hint response has been defined 可以在您的主要响应正在处理时与这些标头一起提前发回,但是对此的支持很差,尤其是因为某些实现会混淆以获取两个响应(一个 103 后跟一个200)。

    【讨论】:

      【解决方案2】:

      您想做的事是可能的,但具体如何做取决于您选择的技术。

      您的应用程序需要有明确的 HTTP/2 API 才能将资产推送到客户端。

      例如,如果您使用 Java 和 Servlet,则需要使用引入了 PushBuilder API 的 Servlet 4.0 来显式推送资产,这可以独立于主资源响应来完成,就像您想做的那样.

      我确信其他技术(例如 NodeJS)具有您可以利用的类似 API,但您必须检查您正在使用的技术。

      【讨论】:

        猜你喜欢
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-16
        • 2018-09-05
        • 2016-03-30
        • 2019-10-10
        相关资源
        最近更新 更多