HTTP2和NGINX - 何时使用keepalive指令?

mic*_*ona 7 nginx http2

我正在尝试迁移到http/2.我已经设置了一个Wordpress网站并配置了NGINX来使用http/2(使用SSL/TLS)来服务它.

我对http/2的理解是,默认情况下,它使用一个连接来传输大量文件 - 而不是打开新连接并为每个文件重复SSL握手.

为了达到类似http/1.x的效果,NGINX提供了keepalive指令.

那么在使用http/2时使用keepalive指令是否有意义?使用"nginx -t"检查我的配置文件时,如果包含它,则报告没有错误.但它有什么影响吗?基准测试显示没有差异.

Bar*_*ard 15

你误解了它是如何工作的.

保持Alive 请求之间的工作.

下载网页时,它会下载HTML页面并发现它需要另外20个资源(CSS文件,javascript文件,图像,字体......等).

在HTTP/1.1下,您只能同时请求其中一个资源,因此通常Web浏览器会激活另外5个连接(总共提供6个连接)并请求这20个资源中的6个.然后,当这些连接释放时,它会请求剩余的14个资源.是的,在这些请求之间保持联系,但这不是它的唯一用途,我们将在下面讨论.设置这些连接的开销很小但很明显,并且只能一次请求这20个资源中的6个资源.这就是为什么HTTP/1.1对于今天使用网络来说效率低的原因,其中典型的网页由100个资源组成.

在HTTP/2下,我们可以在同一个连接上同时触发所有20个请求,因此可以获得一些好处.从技术上讲,你并没有真正受益于那些之间的保持活动,因为连接仍在使用,直到它们全部到达 - 尽管仍然受益于第一个HTML请求和其他20个请求之间的小延迟.

但是,在初始加载之后,可能会有更多请求.要么是因为您正在浏览网站,要么是因为您与该页面进行了交互,而且它会增加XHR api调用.无论是在HTTP/1.1还是HTTP/2上,这些都将受益于保持活动.

所以HTTP/2并不否定对保持活动的需求.它不需要多个连接(除其他外).

所以答案是始终使用keep-alives,除非你有充分的理由不这样做.您正在做什么类型的基准测试来说它没有区别?

  • 在HTTP/2下,保持alives是默认值,HTTP/2不使用连接头(请参阅HTTP/2规范的8.1.2.2节:https://http2.github.io/http2-spec/#HttpHeaders ). (4认同)