HTTP1.0、HTTP1.1 和 HTTP2.0 的区别

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。

HTTP 各版本发布时间

1991 ==> HTTP/0.9

1996 ==> HTTP/1.0

1999 ==> HTTP/1.1

2015 ==> HTTP/2.0

HTTP的基本优化

影响一个 HTTP请求的因素主要有两个: 带宽延迟

带宽:即网络传输速率。

延迟:

  • 浏览器阻塞

    浏览器对于同一个域名,同时只能有 4 个连接(不同浏览器内核会有所差异),超过浏览器最大连接数限制,后续请求就会被阻塞。

  • DNS查询

    域名需要通过DNS解析成IP,浏览器才能与服务器建立连接。通过缓存DNS解析结果来减少这个查询的时间。

  • 建立连接

    HTTP是基于TCP协议的,TCP连接需要三次握手才能完成。每次的三次握手过程在高延迟场景下影响较明显。

HTTP1.0 和HTTP 1.1 的区别

  • 缓存处理

    HTTP 1.0 : 使用If-Modified-Since,Expires来做为缓存判断的标准。

    HTTP 1.1 : 引入了更多的缓存空中策略,Entity tag,If-Unmodified-Since, If-Match, If-None-Match。

  • 带宽优化及网络连接的使用

    HTTP 1.0 : 存在带宽浪费现象,只能获取完整的资源对象,不支持断点续传。

    HTTP 1.1 : 引入了rang头域,允许返回资源对象的某个部分,状态码为206(partial Content)。

  • 错误通知的管理:

    HTTP 1.1 : 新增了24个错误状态响应码。

  • Host头处理

    HTTP 1.0 : 认为每台服务器都绑定一个唯一的IP地址。

    HTTP 1.1 : 请求消息和响应消息都支持Host头域,如果没有Host则会报告一个错误(400 Bad Request),支持一台服务器上存在多个虚拟主机。

  • 长连接

    HTTP 1.0 : 不支持长连接

    HTTP 1.1 : 支持长连接(PersistentConnection)和请求流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少建立和关闭连接的消耗和延迟。默认状态下是开启Connection:keep-alive

HTTP 和 HTTPS

  • HTTPS 需要到 CA 申请证书
  • HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
  • HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  • HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。

HTTP : HTTP –> TCP

HTTPS : HTTP –> SSL/TLS –> TCP

SPDY : HTTP 1.x的优化

SPDY 是google在2012年提出的方案用于优化HTTP 1.x请求延迟和解决HTTP 1.x的安全性。

  • 降低延迟

    采用 多路复合(multiplexing),让多个请求共享一个TCP连接.解决浏览器阻塞的问题,降低延迟提高带宽利用率.

  • 请求优先级

    SPDY允许对每个请求设置优先级,对重要的请求优先响应,用于解决多路复合带来的关键请求呗阻塞的问题.

  • header压缩

    对header进行压缩减少请求时的包大小.

  • 基于HTTPS的加密传输协议

    提高数据传输的可靠性

  • 服务端推送

    服务端可以在一个请求后将相应的其他的资源推送给客户端,客户端在下次请求时可以直接从缓存中获取到。

HTTP –> SPDY –> SSL –> TCP

HTTP 2.0 : SPDY的升级版

  • HTTP 2.0 支持明文 HTTP 传输, SPDY 强制使用 HTTPS

  • HTTP 2.0 消息头的压缩算法是 HPACK, SPDY使用的是DEFLATE

HTTP 2.0 和 HTTP 1.x的比较

  • 新的二进制格式:HTTP 1.x 的解析是基于文本。HTTP 2.0 是基于二进制的。

  • 多路复用:即连接共享,即每一个request都是使用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

  • header压缩:HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

  • 服务器推送:HTTP 2.0 具有与SPDY一样的服务器推送功能。