Open Samgao0312 opened 2 years ago
相对于上一个版本,增加了些功能,优化了网络连接。
持久连接
持久连接什么意思呢?在 HTTP 1.1 版本里面,我们的一个http请求就要在客户端和服务端之间创建一个tcp连接,创建这个tcp连接之后在服务端返回完内容之后这个tcp链接就关闭掉了。那么这个成本是相对比较高的,因为在建立一个http连接的过程当中,我们要进行一个http的三次握手,那么这一部分是在tcp协议里面做的,我们不需要关心。但是,我们要知道 在这个创建链接的过程当中它的消耗是比较高的,延迟也会比较高。所以如果我们建一个链接之后可以不关闭,然后我们以后新的HTTP请求可以一直在这个连接里面进行一个发送的话,那么它的性能肯定会高很多。
pipeline
我们可以在同一个连接里面发送多个请求,但是服务器端对于进来的请求是要按照顺序进行一个内容反馈的,所以如果前一个请求处理的时间非常长而后一个请求处理的时间比较快,这个时候,后一个请求它不能先发送,它要等第一个请求数据全部发送完成之后它才能进行发送。所以这部分时间就相当于我们的一个串行和一个并行它里面的低性能差异就体现出来了。(这个在http2里面就会进行一个优化)
增加了host和其他一些命令
增加了host后,我们就可以在同一台服务器(我指的是物理服务器)上同时跑多个不同的服务。比如说一个nodejs的web服务一个java的web服务,然后通过host这个字段来表示都是请求的这一台物理服务器上面的,但是我要请求的是里面哪一个软件服务,是nodejs服务还是我们的java服务就是通过host来进行判断的。这个头增加的好处就是我们在同一个物理服务器或者同一个机器里面,我们可以部署很多不同的web服务来进行一个使用,这样的话提高我们物理服务的一个使用效率。
在 HTTP 1.1 里面我们大部分的数据传输是通过字符串传输的,所以它们数据的分片方式是不太一样的。在 HTTP2 里面我们所有的数据都是以帧进传输的。
同一个连接里面发送多个请求不再需要安装顺序来返回数据 而同样是因为有了上一个好处,所以我们同一个连接里面发送了请求不再需要按照顺序来进行一个返回处理了。它可以同时返回第一个请求里面的数据和第二个请求里面的数据。这样的话他就是并行的一个效率,能够更大限度的去让整个web应用的传输效率有一个质的提升。
头信息压缩以及推送等提高效率的内容
HTTP2其实整体上就是为了解决HTTP 1.1里面它的一些性能低下的问题。头信息压缩什么概念呢,在 HTTP 1.1 里面我们每一次发送请求和返回请求差的很多http头都是必须要进行一个完整的发送和返回的,但其实这一部分头信息里面很多的内容是以字符串的形式保存了,所以它的占用带宽的量是比较大的,在 HTTP2 里面头信息进行了压缩,就可以有效的减少带宽。
第二个是推送的功能。我们知道http请求是只能够我这边发起请求,然后服务器端响应我的请求。就是说客户端永远是主动方,服务器端永远是被动方。HTTP2里面有了推送的功能之后,服务器端是可以主动发送一些数据传输的。
那它解决了什么问题呢?举一个最简单的例子,我们知道html,我们的web页面,因为现在我们在外面都会去要求有一些css/js文件,那么它们都是以链接的方式在html文本信息里面显示着 通过浏览器解析里面的内容之后,然后再根据我这个链接里面它包含的这个url地址,再去请求对应的是css、js文件。那这里面就会包含一个顺序的问题,我们需要去先请求到html文本,然后在浏览器里面运行解析的这个文本之后,我们才能去发送css的请求和js的请求。
css/js
HTTP2里面有了推送的功能之后,我们请求这个html的同时,我们可以主动把这个html里面所需要用到的css文件和js文件推送到我们的客户端。这样的话就是我们html、css、js发送顺序是并行的,而不是串行的。这样一想大家应该都能理解了, 就是它整体的一个传输效率和性能肯定是要高非常多的。
OK,这就是我们的HTTP协议发展的一个历史。那么其中当然还包含了HTTPS协议,就是一个安全版本,但是实际使用内容跟HTTP1.1其实没有特别大的区别。
HTTP/0.9
HTTP/1.0
HTTP/1.1
相对于上一个版本,增加了些功能,优化了网络连接。
持久连接
持久连接什么意思呢?在 HTTP 1.1 版本里面,我们的一个http请求就要在客户端和服务端之间创建一个tcp连接,创建这个tcp连接之后在服务端返回完内容之后这个tcp链接就关闭掉了。那么这个成本是相对比较高的,因为在建立一个http连接的过程当中,我们要进行一个http的三次握手,那么这一部分是在tcp协议里面做的,我们不需要关心。但是,我们要知道 在这个创建链接的过程当中它的消耗是比较高的,延迟也会比较高。所以如果我们建一个链接之后可以不关闭,然后我们以后新的HTTP请求可以一直在这个连接里面进行一个发送的话,那么它的性能肯定会高很多。
pipeline
我们可以在同一个连接里面发送多个请求,但是服务器端对于进来的请求是要按照顺序进行一个内容反馈的,所以如果前一个请求处理的时间非常长而后一个请求处理的时间比较快,这个时候,后一个请求它不能先发送,它要等第一个请求数据全部发送完成之后它才能进行发送。所以这部分时间就相当于我们的一个串行和一个并行它里面的低性能差异就体现出来了。(这个在http2里面就会进行一个优化)
增加了host和其他一些命令
增加了host后,我们就可以在同一台服务器(我指的是物理服务器)上同时跑多个不同的服务。比如说一个nodejs的web服务一个java的web服务,然后通过host这个字段来表示都是请求的这一台物理服务器上面的,但是我要请求的是里面哪一个软件服务,是nodejs服务还是我们的java服务就是通过host来进行判断的。这个头增加的好处就是我们在同一个物理服务器或者同一个机器里面,我们可以部署很多不同的web服务来进行一个使用,这样的话提高我们物理服务的一个使用效率。
HTTP2
在 HTTP 1.1 里面我们大部分的数据传输是通过字符串传输的,所以它们数据的分片方式是不太一样的。在 HTTP2 里面我们所有的数据都是以帧进传输的。
同一个连接里面发送多个请求不再需要安装顺序来返回数据 而同样是因为有了上一个好处,所以我们同一个连接里面发送了请求不再需要按照顺序来进行一个返回处理了。它可以同时返回第一个请求里面的数据和第二个请求里面的数据。这样的话他就是并行的一个效率,能够更大限度的去让整个web应用的传输效率有一个质的提升。
头信息压缩以及推送等提高效率的内容
HTTP2其实整体上就是为了解决HTTP 1.1里面它的一些性能低下的问题。头信息压缩什么概念呢,在 HTTP 1.1 里面我们每一次发送请求和返回请求差的很多http头都是必须要进行一个完整的发送和返回的,但其实这一部分头信息里面很多的内容是以字符串的形式保存了,所以它的占用带宽的量是比较大的,在 HTTP2 里面头信息进行了压缩,就可以有效的减少带宽。
第二个是推送的功能。我们知道http请求是只能够我这边发起请求,然后服务器端响应我的请求。就是说客户端永远是主动方,服务器端永远是被动方。HTTP2里面有了推送的功能之后,服务器端是可以主动发送一些数据传输的。
那它解决了什么问题呢?举一个最简单的例子,我们知道html,我们的web页面,因为现在我们在外面都会去要求有一些
css/js
文件,那么它们都是以链接的方式在html文本信息里面显示着 通过浏览器解析里面的内容之后,然后再根据我这个链接里面它包含的这个url地址,再去请求对应的是css、js文件。那这里面就会包含一个顺序的问题,我们需要去先请求到html文本,然后在浏览器里面运行解析的这个文本之后,我们才能去发送css的请求和js的请求。HTTP2里面有了推送的功能之后,我们请求这个html的同时,我们可以主动把这个html里面所需要用到的css文件和js文件推送到我们的客户端。这样的话就是我们html、css、js发送顺序是并行的,而不是串行的。这样一想大家应该都能理解了, 就是它整体的一个传输效率和性能肯定是要高非常多的。
OK,这就是我们的HTTP协议发展的一个历史。那么其中当然还包含了HTTPS协议,就是一个安全版本,但是实际使用内容跟HTTP1.1其实没有特别大的区别。