【问题标题】:Including header for Http2 including css, js and files in php for server push包括 Http2 的标头,包括用于服务器推送的 php 中的 css、js 和文件
【发布时间】:2017-07-13 12:21:17
【问题描述】:

在 apache2 中成功包含 http2 后。我正面临服务器推送的问题。我在网站上有 4-5 个 css、4-5 个 js 和 100 张图片。那么我将如何处理多个资产呢?

    <link href="source" rel="stylesheet">
    <script src="source"></script>
    <img src="source">
   header('Link: </asset/to/push.js>; rel=preload; as=script')

所以如果我有 100 个资产,我必须为每个资产标头,那么会有 100 个左右的标头

【问题讨论】:

  • 是的。你必须一个接一个地做。
  • 另外你需要在发送真实内容之前使用header功能
  • @KoalaYeung 不能在 htaccess 中完成或告诉代码,如果 .css 扩展名将其作为服务器推送
  • 服务器推送标头应添加到需要资产的页面。例如如果你的login.php需要css/style.css,那么login.php文件应该提供服务器推送头。
  • 您的 Apache 不会知道您需要哪些资源来创建某个 HTML 页面。

标签: php http-headers assets http2 server-push


【解决方案1】:

添加Link 标头并让Apache 解析它们并推送相关资源的另一种解决方案是将诸如jscss 和图像文件等辅助资源自然地关联到主要资源。

这是我们在 Jetty 中采用的方法(免责声明,我是该解决方案的实施者)。

我们使用此解决方案通过 HTTP/2 和 HTTP/2 Push 为我们自己的网站提供服务,该网站基于 WordPress。

这里介绍的方法是:slidesvideo

基本思想是,当浏览器接收到 HTML 页面时,它会立即对其进行解析并执行下载二级资源所需的请求,例如 jscss 文件。 服务器(在本例中为 Jetty)可以将主要资源(html)与次要资源关联起来。

下次对同一html页面的请求到达时,Jetty 已经知道需要哪些辅助资源,并且可以推送它们。 不需要 Link 标头,因为 Jetty 从浏览器执行的请求模式中“了解”页面所需的资源是什么。

这种方法可以根据具体情况进行微调,但开箱即用效果很好,并提供了显着的性能改进,请参阅上面链接的视频中的here for the live demo

我建议阅读/观看整个幻灯片/视频,以了解有关 HTTP/2 和 HTTP/2 Push 的更大背景,但重点是 Jetty + PHP 与 HTTP/2 的组合是 HTTP/2 的强大解决方案推送并且不需要更改 PHP 页面 - 这在使用 PHP 框架(如 WordPress 或 Drupal)时非常完美,并且可以避免向您的 PHP 页面添加 100+ Link 标头。

【讨论】:

  • 所以我们不能从其他服务器推送图像,例如从我的服务器中的google.com/logo.png 推送图像
  • 您可以从自己的服务器推送图片,但不能从其他服务器推送。
  • http2 对服务器是否有任何不良影响,因为我们将 http1 升级到 http2 并实施了服务器,但我们无法看到剧烈的变化。
  • 如果你没有看到任何区别,那么你可能没有正确配置 HTTP/2 Push,或者你使用的服务器有错误的实现,或者你的情况很奇特(虽然看起来比如 HTTP/2 应该可以正常工作的情况)。
  • 执行错误?我正在使用 nginx 和 apache ..http2 是不是正式启动并针对这两个进行了全面测试?
【解决方案2】:

只要尽早推送真正需要的东西,否则您最终可能根本没有性能优势。

这就是我添加图标字体的方式:

header("link: </fonts/icons.woff2?v=".$version.">; rel=preload; as=font; type=\"font/woff2\" nopush", false);

使用多个链接头时不要忘记设置 replace=false。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    • 2019-06-27
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多