原文网址:https://www.youyong.top/article/11594126883ce
HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。
原文网址:https://www.youyong.top/article/11594126883ce
HTTP持久连接(HTTP persistent connection,也称作HTTP keep-alive或HTTP connection reuse)是使用同一个TCP连接来发送和接收多个HTTP请求/应答,而不是为每一个新的请求/应答打开新的连接的方法。
原文网址:https://www.youyong.top/article/11594126883ce
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
2)每个stream的基本组成单位是frame(二进制帧),每种frame又分为很多种类型例如HEADERS Frame(头部帧),DATA Frame(内容帧)等等。
3)请求头HEADERS Frame组成了resquest,返回头HEADERS Frame和DATA Frame组成了response,request和response组成了一个stream。
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的唯一标识来相应对应的请求。
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
参考资料:
共 0 条留言