HTTP

HTTP协议(超文本传输协议)是因特网上应用最广泛的一种网络传输协议,它基于TCP/IP协议来传递数据,它是无连接、无状态的,不会在两个请求之间记录任何状态,而且它可以发送任何类型的数据。

目前使用最广泛的版本是HTTP/1.1

HTTP大致存在的问题:

  1. 使用明文传输数据。
  2. HTTP请求头臃肿,且没有什么好的压缩方案。
  3. 被限制的最大TCP连接数量。
    对同一域名浏览器限制了最大TCP连接数量,通常来说是6个(不同浏览器有不同的限制)。
  4. 排头阻塞(Head-of-line blocking)
    HTTP协议早期,我们发送一个请求,服务器收到并做出响应后才会进行下一个请求,这样十分没有效率。
    后来在HTTP/1.1中提出了管线化(pipelining)技术,允许一次性发送多个请求。然而管线化技术在接收response时需要按照请求发出的顺序依次接收服务器响应。
    如果这一组请求中一旦有请求阻塞了,后面的所有请求都会进入等待状态,这也是浏览器限制最大TCP连接数的原因

HTTPS

HTTPS是在HTTP的基础上增加了SSL/TLS层,网站开发者可以向CA购买证书,再进行相应配置即可将网站升级成HTTPS。
之后数据都会通过非对称加密的形式传输,客户端可通过向CA机构查询以确保自己所访问的页面的正确。

HTTP2

HTTP2基于SPDY(2012年谷歌提出)设计,HTTP2主要有以下新特性:

  1. 二进制数据传输

  2. 多路复用
    对于同一个域名下的多个请求,只需开启一个TCP连接,然后以流标识符标识数据属于哪一个请求,不断向客户端推数据,客户端接收后即可根据流标识符来组成不同请求的完整数据。
    有了多路复用浏览器对于最大同时TCP连接数也就没了意义,同时之前的一些优化手段也可以不用使用了(如:雪碧图,可以尽情使用小图了)。

  3. 服务端推送
    浏览器发送一个请求,服务器可以主动向浏览器推送与这个请求相关资源,浏览器就不用发起后续请求了。

  4. 请求Header压缩
    使用HPACK算法压缩头部内容