1. HTTP1.0
HTTP1.0的特点
- 短连接:HTTP1.0使用的是短连接,浏览器每次请求访问服务器都要与服务器建立TCP连接,在请求结束后就会断开连接。
- 无状态:服务器不会跟踪客户端也不会记录请求。
HTTP1.0的缺陷
- 无法复用连接:由于每次请求都要建立新的TCP连接,增加了网络传输的负担,降低了网络传输的效率。
- 队头堵塞:下个请求必须等到上一个请求响应到达后才能开始发送。所以如果有一个请求一直无法到达,就会导致下一个请求发送不了,发生堵塞问题,
2. HTTP1.1
HTTP1.1相比HTTP1.0的优化
- 长连接:HTTP1.1使用Connection:keep-alive字段来支持长连接,保持HTTP连接不断开,有效解决每次请求服务器都要重新建立TCP连接,提高了挽留过传输的利用率。
- 支持管道:由于HTTP1.1使用的是长连接,使得HTTP1.1.可以使用管道网络传输,将前进迁出对联从客户端转移到服务端,使得请求能够并行传输。只要第一个请求发出,不必等待其返回就可以发出第二个请求。
- 缓存处理:
HTTP1.1的缺点
- 队头堵塞:HTTP1.1无法解决对头堵塞的问题,虽然发送请求可以并行发送,但是服务器响应请求还是需要返回一个请求后才能返回下一个。
- 请求头部大:HTTP1.1可以压缩请求体的内容,但是无法压缩请求头,首部的信息越大则会让延迟越大,如果每次互相发送相同的首部则会造成浪费。
- 明文传输,不够安全
- 请求只能从客户端发起,服务端只能响应。
3. HTTP2.0
HTTP2.0相比HTTP1.x的优化
- 压缩头部:HTTP2.0在客户端和服务器同时维护一张首部信息表来跟踪和记录之前发送过的字段,对于相同的首部则直接发送索引号而不是发送头部信息,有效提高了传输效率。
- 二进制分帧:HTTP1.x报文使用的是纯文本形式,而HTTP2.0将头部信息和请求体使用二进制格式格式进行编码,并称为头部信息帧和数据帧,对于计算机而言无需将文本形式的报文先转成二进制格式再解析,而是直接解析二进制格式的数据,有效提高了处理信息的效率。
- 多路复用:HTTP1.x都是需要通过一个TCP连接完成请求的,在一个连接中只有上一个请求被响应了才会进行处理下一个,所以如果中间出现了等待响应的情况,那就会出现堵塞的问题。HTTP2.0引入流的概念,多个流复用一个TCP连接,对于不同的请求使用不同的流ID进行区分,不同流的数据帧可以乱序发送,因此可以同时发送多个流的信息,实现真正的并发请求。
- 服务器推送:服务器除了响应请求之外,还可以向客户端需要的资源主动推送资源,避免客户端再次发送请求从客户端获取,减少消息传递的速度。