使用 HTTP/2 推送,我可以在初始响应之前推送资产吗?
With HTTP/2 Push, can I push assets before the initial response?
我有一个包含 JS、CSS 和字体资源的网页。在确定 HTTP 状态代码和响应的 headers 之前,页面必须进行一些繁重的处理。
我想使用 HTTP/2 推送将资产发送到浏览器,而无需等待这种繁重的处理。时间线看起来像这样:
- 客户请求
index.html
- 服务器为
script.js
、styles.css
和 font.woff2
发送 PUSH_PROMISES
- 服务器发送 HTTP headers 和上述资产的数据
- 服务器进行一些繁重的处理以确定
index.html
响应...
- 服务器发送 HTTP headers 和
index.html
的数据
这可能吗?根据我对 Server Push in the HTTP/2 spec 的理解,这似乎是可能的。然而,这是我第一次深入研究 HTTP/2 规范,所以我肯定会遗漏一些东西。
是的,这是完全允许的,例如在 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 headers 作为推送信号,因此需要将响应发回以显示 header。
一个额外的 103 Early Hint response has been defined 可以在处理您的主要响应时与这些 header 一起提前发回,但是对此的支持很差,尤其是因为某些实现会混淆以获取返回两个响应(103 后跟 200)。
你想做什么是可能的,但如何做的细节取决于你选择的技术。
您的应用程序需要具有明确的 HTTP/2 API 才能将资产推送到客户端。
例如,如果使用Java和Servlet,则需要使用Servlet 4.0引入PushBuilder
API来显式推送资产,这可以独立于主资源完成回复,就像你想做的那样。
我确信其他技术(例如 NodeJS)具有您可以利用的类似 API,但您必须检查您正在使用的技术。
我有一个包含 JS、CSS 和字体资源的网页。在确定 HTTP 状态代码和响应的 headers 之前,页面必须进行一些繁重的处理。
我想使用 HTTP/2 推送将资产发送到浏览器,而无需等待这种繁重的处理。时间线看起来像这样:
- 客户请求
index.html
- 服务器为
script.js
、styles.css
和font.woff2
发送 PUSH_PROMISES
- 服务器发送 HTTP headers 和上述资产的数据
- 服务器进行一些繁重的处理以确定
index.html
响应... - 服务器发送 HTTP headers 和
index.html
的数据
这可能吗?根据我对 Server Push in the HTTP/2 spec 的理解,这似乎是可能的。然而,这是我第一次深入研究 HTTP/2 规范,所以我肯定会遗漏一些东西。
是的,这是完全允许的,例如在 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 headers 作为推送信号,因此需要将响应发回以显示 header。
一个额外的 103 Early Hint response has been defined 可以在处理您的主要响应时与这些 header 一起提前发回,但是对此的支持很差,尤其是因为某些实现会混淆以获取返回两个响应(103 后跟 200)。
你想做什么是可能的,但如何做的细节取决于你选择的技术。
您的应用程序需要具有明确的 HTTP/2 API 才能将资产推送到客户端。
例如,如果使用Java和Servlet,则需要使用Servlet 4.0引入PushBuilder
API来显式推送资产,这可以独立于主资源完成回复,就像你想做的那样。
我确信其他技术(例如 NodeJS)具有您可以利用的类似 API,但您必须检查您正在使用的技术。