HTTP
HTTP协议(超文本传输协议)是因特网上应用最广泛的一种网络传输协议,它基于TCP/IP
协议来传递数据,它是无连接、无状态的,不会在两个请求之间记录任何状态,而且它可以发送任何类型的数据。
目前使用最广泛的版本是HTTP/1.1
HTTP大致存在的问题:
- 使用明文传输数据。
- HTTP请求头臃肿,且没有什么好的压缩方案。
- 被限制的最大TCP连接数量。
对同一域名浏览器限制了最大TCP连接数量,通常来说是6个(不同浏览器有不同的限制)。 - 排头阻塞(Head-of-line blocking)
HTTP协议早期,我们发送一个请求,服务器收到并做出响应后才会进行下一个请求,这样十分没有效率。
后来在HTTP/1.1中提出了管线化(pipelining)技术
,允许一次性发送多个请求。然而管线化技术在接收response时需要按照请求发出的顺序依次接收服务器响应。
如果这一组请求中一旦有请求阻塞了,后面的所有请求都会进入等待状态
,这也是浏览器限制最大TCP连接数的原因
。
HTTPS
HTTPS是在HTTP的基础上增加了SSL/TLS
层,网站开发者可以向CA购买证书,再进行相应配置即可将网站升级成HTTPS。
之后数据都会通过非对称加密的形式传输,客户端可通过向CA机构查询以确保自己所访问的页面的正确。
HTTP2
HTTP2基于SPDY(2012年谷歌提出)设计,HTTP2主要有以下新特性:
二进制数据传输
多路复用
对于同一个域名下的多个请求,只需开启一个TCP连接,然后以流标识符
标识数据属于哪一个请求,不断向客户端推数据,客户端接收后即可根据流标识符
来组成不同请求的完整数据。
有了多路复用浏览器对于最大同时TCP连接数也就没了意义,同时之前的一些优化手段也可以不用使用了(如:雪碧图,可以尽情使用小图了)。服务端推送
浏览器发送一个请求,服务器可以主动向浏览器推送与这个请求相关资源,浏览器就不用发起后续请求了。请求Header压缩
使用HPACK算法压缩头部内容