http/https/http2.0相关知识点整理

现代浏览器与服务器建立了tcp连接后是否会在一个HTTP请求完成后断开?什么情况下会断开?

在http/1.0中,一个服务器发送完一个http响应之后,会断开tcp连接。但是每次请求都会重新建立和断开tcp连接。代价很大。所以虽然标准中没有设定,某些服务器对connection:keep-alive的header进行了支持,意思是说,完成http请求之后不要断开http请求使用的tcp连接。好处是连接可以被重新使用,不需要建立tcp连接,如果维持连接,SSL的开销也可以避免。

既然维持tcp连接这么好,http/1.1就把connection头写进了标准,并且默认开启持久连接。除非请求中写明Connection:close.否则浏览器和服务器之间会维持一段时间的tcp连接,不会一个请求结束就断开。

一个tcp连接可以对应几个http请求?

如果维持连接,一个tcp连接可以发送多个http请求。

一个tcp连接中的http请求发送可以一起发送吗?一起发送三个请求,然后一起接受三个请求?

http/1.1存在一个问题,单个tcp连接同一时刻只能处理一个请求,两个请求的生命周期不能重叠,任意两个http请求从开始到结束的时间在同一个tcp连接里面不能有重叠。虽然有http pipelining, 但是这个功能浏览器里面默认是关闭的。

为什么刷新网页不需要重新建立ssl连接?

因为tcp连接会被维持一段时间,tcp不需要重新建立,ssl就会使用之前的。

浏览器对于同一host建立的tcp连接到数量有没有限制。

是有的,开太多电脑受不了,而且服务器也受不了。chrome最多允许对同一host建立6个tcp连接。

如果收到的html包含十几个图片标签,这些图片是以什么方式,什么顺序,建立多少连接,使用什么协议被下载下来的?

如果图片是https连接并且在同一个域名下,浏览器ssl握手之后就会和服务器商量能不能用http2. 如果能,就会使用multiplexing功能在这个连接上进行多路传输。不一定所有挂在这个域名的资源都会通过tcp连接去获取,但是multiplexing是可能被用到的。

如果用不了http2, 或者用不了https.浏览器就会在一个host上建立多个tcp连接,连接数量的最大限制取决于浏览器设置,这些连接在空闲的时候就会被浏览器用来发送新的请求,如果所有的连接都在发送请求,那就只能等着了。

参考:

https://mp.weixin.qq.com/s/FADmUspxZdbIvUbWLVnRSw

怎么用起来?

首先得安装nginx(version>=1.10.0) openssl(version>=1.0.2)
具体可以参考 https://zhuanlan.zhihu.com/p/29609078
因为http2.0基于https, 可以参考 https://blog.csdn.net/funnyPython/article/details/94437232 完成对https的配置
最后是配置http2.0

推荐一个chrome工具

HTTP/2 and SPDY indicator

可以用于检测当前的网站是否支持http2.0 如果支持,会显示蓝色

你可能感兴趣的:(配置,http)