HTTP2.0关于多路复用的研究

赞赏 2017-06-14

HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。


问题一:什么是keep live?


HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。

我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成 之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接)时,Keep-Alive功能使客户端到服 务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

 

问题二:keep alive和传统的区别?



一图胜千言,由图可知引入的keep alive的链接不必在每次请求都开启一个新的链接。


问题三:keep alive如何配置?



Apache服务器:

httpd.conf:

KeepAlive On             // 是否打开keep alive
MaxKeepAliveRequests 300 // 每个连接最大可复用的请求数
KeepAliveTimeout 3       // 每个请求可复用的time时间s


Nginx服务器:

nginx.conf:

keepalive_timeout //服务器接收在10s以内的所有connection复用超过10则关闭建立一个新的connection 0代表关闭keepalive


https://nodejs.org/api/http.html#http_class_http_agent

 

问题4:多路复用是什么?



1)HTTP2的请求的TCP的connection一旦建立,后续请求以stream的方式发送。

2)每个stream的基本组成单位是frame(二进制帧),每种frame又分为很多种类型例如HEADERS Frame(头部帧),DATA Frame(内容帧)等等。

3)请求头HEADERS Frame组成了resquest,返回头HEADERS Frame和DATA Frame组成了response,request和response组成了一个stream。

 

问题5:多路复用和keep alive区别?


1)线头阻塞(Head-of-Line Blocking),HTTP1.X虽然可以采用keep alive来解决复用TCP的问题,但是还是无法解决请求阻塞问题。

2)所谓请求阻塞意思就是一条TCP的connection在同一时间只能允许一个请求经过,这样假如后续请求想要复用这个链接就必须等到前一个完成才行,正如上图左边表示的。

3)之所以有这个问题就是因为HTTP1.x需要每条请求都是可是识别,按顺序发送,否则server就无法判断该相应哪个具体的请求。

4)HTTP2采用多路复用是指,在同一个域名下,开启一个TCP的connection,每个请求以stream的方式传输,每个stream有唯一标识,connection一旦建立,后续的请求都可以复用这个connection并且可以同时发送,server端可以根据stream的唯一标识来相应对应的请求。

 

问题6:多路复用就不会关闭了么?



多路复用使用的同一个TCP的connection会关闭么,什么时候关闭,这是个问题?从标准上看到一段文字:

HTTP/2 connections are persistent. For best performance, it is
expected that clients will not close connections until it is
determined that no further communication with a server is necessary
(for example, when a user navigates away from a particular web page)
or until the server closes the connection.

意思就是说关闭的时机有2个:
1)用户离开这个页面。
2)server主动关闭connection。
但是标准总归标准,不同的服务器实现时有了自己的约定,就行keep alive一样,每种服务器都有对自己多路复用的这个connection有相关的配置:

Apache:

Default: 
http2_idle_timeout 3m;
Context: http, server

Syntax: http2_recv_timeout time;
Default:
http2_recv_timeout 30s;
Context: http, server


http://nginx.org/en/docs/http/ngx_http_v2_module.html#http2_idle_timeout


参考资料:

  1. HTTP2官方标准:https://tools.ietf.org/html/rfc7540
  2. https://cascadingmedia.com/insites/2015/03/http-2.html


登陆后阅读全文
阅读 2253 赞赏 0 有用 0 没用 0 收藏 0 分享

   



0 条留言

琅琊阁主的头像

琅琊阁主

抛砖引玉

相关文章

HTTP,HTTP2.0,SPDY,HTTPS你应该知道的一些事

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

词条 | 影子银行 | 什么是影子银行

如何保存征集助手投票助手里收集到的图片视频?

解决微信开发者工具不能复制

福利 | Purnhub的视频如何下载?

Instagram的图片和视频如何下载?

公号素材助手只下载了一张图片

提取图片中的文字 | ocr文字识别助手

Axure RP 8 注册码(最新亲测可用) Licensee + Key

福利 | 第九工厂「艺术二维码」的价值180元的三个月会员邀请码

如何9.85折给中国联通手机、固话、宽带充值?

手机扫一扫
分享文章