在 Apache 服务器上启用 HTTP2 服务器推送压缩

在 Apache 服务器上启用 HTTP2 服务器推送压缩

如果我为我的 Apache 服务器启用 H2,并在 HTML 文档上指定预加载的链接标头,服务器将执行H2 服务器推送因为它解析 Link 标头- 到目前为止,一切都很好。

问题是,推送的资源未经过压缩。
我猜是因为服务器推送不会创建 HTTP 请求,因此accept-encoding不会提供请求标头。问题是,如果客户端必须下载未压缩的内容,则不会获得任何性能改进。是否仍然可以提供压缩内容?也许基于accept-encodingHTML 文档的请求标头?

我的 Apache 配置

<VirtualHost *:443>
    Protocols h2 http/1.1
    [...]
    <Location /index.html>
        Header add Link "</css/all.min.css>;rel=preload;as=style"
    </Location>
    [...]
</VirtualHost>

HTML 标头

HTML 文档中的请求标头

accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
accept-encoding:gzip, deflate, sdch, br
accept-language:de,en-US;q=0.8,en;q=0.6
cache-control:no-cache

HTML 文档的响应标头

accept-ranges:bytes
cache-control:no-transform,public,max-age=300,s-maxage=900
content-encoding:gzip
content-length:2183
content-type:text/html
etag:"2472-5385af4b7bbda-gzip"
last-modified:Sun, 24 Jul 2016 05:29:47 GMT
link:</css/all.min.css>;rel=preload;as=style
server:Apache/2.4.18 (Debian)
status:200
vary:Accept-Encoding

来自 /css/all.min.css 的响应标头

accept-ranges:bytes
cache-control:no-transform,public,max-age=300,s-maxage=900
content-length:14237
content-type:text/css
etag:"379d-5385af4b9139b"
last-modified:Sun, 24 Jul 2016 05:29:47 GMT
server:Apache/2.4.18 (Debian)
status:200
vary:Accept-Encoding

答案1

这似乎只是 中的一个错误mod_http2,但它已在 1.2.6 版本中修复: https://github.com/icing/mod_h2/issues/86

答案2

相关内容