krenor / http2-pusher
为Laravel提供HTTP/2缓存感知推送。
Requires
- php: >=7.0.0
- illuminate/container: ^5.5
- illuminate/http: ^5.5
- illuminate/routing: ^5.5
- illuminate/support: ^5.5
- symfony/css-selector: ^3.4
- symfony/dom-crawler: ^3.4
Requires (Dev)
- diablomedia/phpunit-pretty-printer: ^2.0
- mockery/mockery: ^1.0
- phpunit/phpunit: ^6.0
This package is auto-updated.
Last update: 2024-09-22 20:28:00 UTC
README
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
中间件路由请求时,将扫描响应(除非它是RedirectResponse
或json
或ajax
请求)以查找任何可推送的资源。 - 或者,您可以使用扩展自该包的ServiceProvider提供的默认
\Illuminate\Http\Response
类上的pushes()
方法。 - 使用
response()
辅助函数也可以,但是提示pushes()
方法将不会可用。
这两种方法都会在响应中添加一个Link
头和一个Cookie,其中包含所有找到的资源以及通过global_pushes
配置的资源。在后续请求中,将扫描cookie以查找其已经推送的资源。如果有任何新资源可用或推送的资源已更改,则将扩展Link
头和Cookie以包括这些资源。
注意:目前仅支持这些扩展。
这并不是严格意义上的“缓存感知”,因为服务器确实知道资产是否缓存在客户端,但逻辑上是这样的。如果您不能使用像H2O这样的Web服务器或Apache的mod_http2
模块的H2PushDiarySize指令,此解决方案可能足以满足您的需求。
贡献
有关更多信息,请参阅CONTRIBUTING。
许可证
麻省理工学院许可证。请参阅许可证获取更多信息。