Jetty HTTP2服务器推送支持

4
1个回答

3

Jetty HTTP/2支持完整的HTTP/2推送,实际上有不同的方式。Webtide's website已经启用了Jetty的HTTP/2推送。

有一个PushCacheFilter,它实现了与Jetty SPDY的PushStrategy相同的算法,基于Referer头部。

有一个PushSessionCacheFilter,它使用构建器实现了更复杂的方法来推送资源。

目前两者都使用Jetty特定的API,试图将它们作为Servlet 4.0规范的标准并在真实世界的示例中进行测试。

这种方法的好处是完全自动化,不需要应用程序支持:可以与任何旧的/遗留的Web应用程序直接使用。

Jetty团队可以探索使用头的可能性,但似乎需要应用程序的支持(应用程序必须以正确的格式添加头),以及影响性能的代理层。这由https://bugs.eclipse.org/bugs/show_bug.cgi?id=463457跟踪,欢迎在那里做出贡献。
为了实现自己的资源推送策略,可以编写一个简单的Servlet过滤器,在其中使用Jetty特定的API(例如Dispatcher.push(...)或PushBuilder API)来推送自己的资源,类似于上述引用的过滤器所做的。

好的,您能否确认即使这些过滤器非常高效,第一次发送请求时也不会推送任何资源吗?如果应用程序具有帮助在构建时检测引用资源的机制,那么即使是第一个请求也将从推送中受益?此外,当我检查PushBuilder时,它似乎能够通过last-modified / Etag标头避免推送操作。但是这些标头是从初始请求中检索的。例如,如果我过滤HTML页面,则将根据HTML页面请求的标头推送相关的JS文件。这是正确的吗? - Guillaume D.
当前的过滤器在第一次请求时会创建缓存,因此它们只会从第二个请求开始推送。 目前还没有机制可以“预填充”缓存,使其在第一次请求时就能推送,但这是一个有趣的功能。请在 https://bugs.eclipse.org/bugs/enter_bug.cgi?product=Jetty 提交一个功能请求。 查看最后修改/etag标头的目的是为了避免在浏览器提示已经有资源缓存的情况下进行推送。如果主要资源已经包含它们,则不应该推送JS。 我建议我们将此移动到Jetty邮件列表中。 - sbordet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接