krenor/http2-pusher

为Laravel提供HTTP/2缓存感知推送。

1.0.0 2018-02-13 09:10 UTC

This package is auto-updated.

Last update: 2024-09-22 20:28:00 UTC


README

Packagist Travis Quality Coverage Dependencies Downloads License

HTTP/2是HTTP协议的重大进步,允许通过单个TCP连接传输多个资源。这减少了诸如域名分片、图像精灵等“优化实践”的需求。然而,HTTP/2有一个非常酷的功能,可以大大加快您网站的渲染时间,那就是服务器推送。服务器推送允许您在浏览器知道需要这些资源之前,将资源与HTML有效载荷一起发送。(来源)

如果没有缓存摘要,HTTP/2服务器推送在性能上并不比HTTP/1资源捆绑有明显的优势。缓存摘要是IETF HTTP工作组正在讨论的规范(来源)

此包旨在创建一个缓存感知机制,用于HTTP/2服务器推送,直到缓存摘要可用。它有助于推送所需的确切资源;既不多也不少,以免浪费带宽和导致往返延迟。

安装

您可以通过composer安装此包

composer require krenor/http2-pusher

Laravel 5.5使用包自动发现,因此不需要您手动将ServiceProvider添加到您的providers数组配置中。

配置

您可以配置以下三件事

  • cookie
    • name (默认: h2_cache-digest)
    • duration 需要有效的strtotime(默认: 60天)
  • global_pushes 您想要在每次页面加载时推送的资源

用法

  • 当您通过ServerPush中间件路由请求时,将扫描响应(除非它是RedirectResponsejsonajax请求)以查找任何可推送的资源。
  • 或者,您可以使用扩展自该包的ServiceProvider提供的默认\Illuminate\Http\Response类上的pushes()方法。
  • 使用response()辅助函数也可以,但是提示pushes()方法将不会可用。

这两种方法都会在响应中添加一个Link头和一个Cookie,其中包含所有找到的资源以及通过global_pushes配置的资源。在后续请求中,将扫描cookie以查找其已经推送的资源。如果有任何新资源可用或推送的资源已更改,则将扩展Link头和Cookie以包括这些资源。

注意:目前仅支持这些扩展

这并不是严格意义上的“缓存感知”,因为服务器确实知道资产是否缓存在客户端,但逻辑上是这样的。如果您不能使用像H2O这样的Web服务器或Apache的mod_http2模块的H2PushDiarySize指令,此解决方案可能足以满足您的需求。

贡献

有关更多信息,请参阅CONTRIBUTING

许可证

麻省理工学院许可证。请参阅许可证获取更多信息。