包括Http2的头文件,包括css、js和php中用于服务器推送的文件

包括Http2的头文件,包括css、js和php中用于服务器推送的文件,php,http-headers,assets,http2,server-push,Php,Http Headers,Assets,Http2,Server Push,在成功地将http2纳入apache2之后。我面临着服务器推送的问题。我有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=p

在成功地将http2纳入apache2之后。我面临着服务器推送的问题。我有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')

标题('Link:;rel=preload;as=script')

因此,我必须为每个资产添加头如果我有100个资产,那么将有100个左右的头

添加
链接
头并让Apache解析它们并推送相关资源的另一个解决方案是自然地关联辅助资源,例如
js
css
和图像文件到主资源

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

我们使用这个解决方案来服务我们自己的网站,基于WordPress,通过HTTP/2和HTTP/2推送

此处介绍了该方法:

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

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

这种方法可以根据具体情况进行微调,但开箱即用,性能显著提高,请参见上面链接的视频


我建议阅读/观看整个幻灯片/视频,了解有关HTTP/2和HTTP/2推送的更大背景,但重点是Jetty+PHP与HTTP/2的结合是一个强大的HTTP/2推送解决方案,不需要更改PHP页面-这在使用WordPress或Drupal等PHP框架时非常完美,为了避免在PHP页面中添加100+
链接头。

只需提前推送真正需要的内容,否则您可能会完全失去性能优势

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

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

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

Yup。你必须一个接一个地做。在发送real之前,你还需要使用header函数content@KoalaYeung它不能在htaccess中完成,或者告诉代码,如果.css扩展名出现,则将其作为服务器推送,服务器推送头应添加到需要该资源的页面中。例如,如果您的
login.php
需要
css/style.css
,则
login.php
文件应提供服务器推送头。您的Apache不知道什么资产您需要一个特定的HTML页面。因此,我们无法从其他服务器推送图像,例如,从我的服务器推送图像您可以从自己的服务器推送图像,但不是来自其他服务器。当我们使用服务器实现将http1升级到http2时,http2对服务器是否有任何不良影响我们无法看到剧烈的变化。如果您没有看到任何差异,则可能是您没有正确配置HTTP/2推送,或者您使用的服务器实现有错误,或者您的情况非常特殊(尽管看起来HTTP/2应该可以很好地工作)?我正在使用nginx和apache。http2不是正式发布了,并对这两个版本进行了全面测试吗?