HTTP1.1 新改动
-
持久连接
-
请求管道化
-
增加Host字段
-
支持断点传输
1. 持久连接:
HTTP1.0最显著的特点是短连接,每次与服务器的交互都要重新开一个连接。而HTTP是基于TCP协议的,每次连接都要经历三次握手,四次挥手,慢启动…是非常消耗资源的。HTTP1.1设置connection:keep-alive
2. 管线化理论
HTTP1.0中,发送一次请求时,必须等服务器响应了才能继续发送请求。
HTTP1.1提出了管线化理论(Pipelining),即客户端可以同时发送多个HTTP请求,而不用等一个个响应之后再请求。其实就是把多个HTTP请求放在一个TCP连接中一一发送,而在发送过程中不需要服务器对前一个请求作出响应。但是!客户端还是要按照发送请求开接收响应。
注意,这个plpelining只是限于理论场景下,默认还是关闭的。
3. 增加Host字段
用来指定服务器域名
4. 支持断点传输
引入了Chunked transfer-coding 范围请求,支持断点传输(实际上利用的是HTTP消息头使用分块传出编码,将实体分块传输)
⭐⭐⭐无论是HTTP1.0还是HTTP1.1都会出现队头阻塞的情况
HTTP2.0的改动
- 多路复用
- 二进制分帧
- 头部压缩
- 服务器推送
1.多路复用
HTTP2.0与HTTP1.1最重要的区别就是解决了队头阻塞的问题。其中,最终要的改动就是多路复用。
多路复用允许一个HTTP连接发起多个请求-响应消息。使用了HTTP/2可能是这样的:
2. 二进制分帧
HTTP2所有性能增强的核心在于新的二进制分帧层(不再以文本形式传输)
HTTP2就是把HTTP1的header和body用frame重新封装了一下。将请求头和header封装为headers frame,将body封装为data frame。
3. 头部压缩
在 HTTP/1 中,HTTP 请求和响应都是由「状态行、请求 / 响应头部、消息主体」三部分组成。一般而言,消息主体都会经过 gzip 压缩,或者本身传输的就是压缩过后的二进制文件(例如图片、音频),但状态行和头部却没有经过任何压缩,直接以纯文本传输。
随着 Web 功能越来越复杂,每个页面产生的请求数也越来越多,根据 HTTP Archive 的统计,当前平均每个页面都会产生上百个请求。越来越多的请求导致消耗在头部的流量越来越多,尤其是每次都要传输UserAgent、Cookie 这类不会频繁变动的内容,完全是一种浪费。
讲的很详细的一篇博客:https://blog.youkuaiyun.com/qq_32523587/article/details/79970471
4.服务器推送
HTTP/2允许服务器在请求之前先推送响应信息到客户端(之前客户端有过请求),如果实现了HTTP缓存,推送的响应信息可以在客户端被缓存(可通过no-cache进行配置)。