Skip to content

Latest commit

 

History

History
41 lines (30 loc) · 3.85 KB

2019-06-12-HTTP1.0,1.1,2.0 版本对比.md

File metadata and controls

41 lines (30 loc) · 3.85 KB

HTTP1.0

  • HTTP1.0 规定浏览器与服务器保持短暂的连接,浏览器每次请求服务器都会创建一个 TCP 连接,服务器响应后就会断开 TCP 连接。由于每次请求都会建立 TCP 连接,而 TCP 连接的建立与释放需要经历三次握手与四次挥手阶段,因此网络的利用率非常低
  • HTTP1.0 规定下一个请求必须在前一个请求到达之前才能发送,是串行的请求。如果前一个请求的响应一直没有到达,后面的请求就会阻塞

HTTP1.1

  • HTTP1.1 使用长连接与流水线方式解决了 HTTP1.0 每次请求都重新建立 TCP 连接的问题,使一个 TCP 连接可以传送多个 HTTP 的请求与响应,减小建立与断开连接的消耗(HTTP1.1 请求头 Connection:keep-alive)
  • 支持 pipeline 网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间
  • 缓存处理,在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since,If-Match,If-None-Match 等更多可供选择的缓存头来控制缓存策略
  • 增加 host 请求头域,用于实现虚拟主机技术,这样的话,服务器就知道你要请求哪个网站了。因为可以有多个域名解析到同一个 IP 上,要区分用户是请求的哪个域名,就需要在 HTTP 的协议中加入域名的信息,而不是被 DNS 转换过的 IP 信息
  • 新增 range 头域实现断点续传。
  • 正式加入了 OPTIONS 方法,其主要用于 CORS – Cross Origin Resource Sharing 应用

2014 年 HTTP/1.1 有了一组新的 RFC

  • 一个需要是加大了 HTTP 的安全性,这样就可以让 HTTP 应用得广泛,比如,使用 TLS 协议
  • 另一个是让 HTTP 可以支持更多的应用,在 HTTP/1.1 下,HTTP 已经支持四种网络协议:
    • 传统的短链接
    • 可重用 TCP 的的长链接模型
    • 服务端 push 的模型
    • WebSocket 模型

HTTP2.0

HTTP2.0 通过在应用层和传输层之间增加一个二进制分帧层,突破了 HTTP1.1 的性能限制、改进传输性能。

  • HTTP/2 是一个二进制协议,增加了数据传输的效率
  • HTTP/2 是可以在一个 TCP 链接中并发请求多个 HTTP 请求,移除了 HTTP/1.1 中的串行请求
  • 多路复用,客户端向某个域名的服务器请求页面的过程中,只会创建一个 TCP 连接。每个请求是一个数据流,数据流以消息的方式发送,而消息又分为多个帧,帧头部记录着 stream id 用来标识所属的数据流,不同属的帧可以在连接中随机混杂在一起。接收方可以根据 stream id 将帧再归属到各自不同的请求当中去
  • HTTP/2 允许服务端在客户端放 cache,又叫服务端 push,也就是说,你没有请求的东西,我服务端可以先送给你放在你的本地缓存中。比如,你请求 X,我服务端知道 X 依赖于 Y,虽然你没有的请求 Y,但我把把 Y 跟着 X 的请求一起返回客户端
  • HTTP/2 会压缩头,如果你同时发出多个请求,他们的头是一样的或是相似的,那么,协议会帮你消除重复的部分
  • 服务器推送,服务器还可以额外的向客户端推送资源,客户端进行缓存而无需客户端明确的请求,比如,你请求 X,我服务端知道 X 依赖于 Y,虽然你没有的请求 Y,但我把把 Y 跟着 X 的请求一起返回客户端

参考

HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比
HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
HTTP 的前世今生