超文本传输协议(HyperText Transfer Protocol) 伴随着计算机网络和浏览器的诞生,HTTP1.0也随之而来,处于计算机网络中的应用层,HTTP是建立在TCP协议之上的。
HTTP的基本优化
影响一个HTTP网络请求的因素主要有两个:带宽和延迟。
- 带宽:单位时间能通过链路的数据量。通常以bps来表示,即每秒可传输之位数。
- 延迟:
- 浏览器阻塞:浏览器对于同一个域名同时只能有 4 个连接,超过浏览器最大连接数限制,后续请求就会被阻塞。
- DNS 查询:将域名解析为 IP 的过程,可以利用DNS缓存结果来减少时间。
- 建立连接:HTTP 是基于 TCP 协议的,浏览器最快也要在第三次握手时才能捎带 HTTP 请求报文,达到真正的建立连接,但是这些连接无法复用会导致每次请求都经历三次握手和慢启动。
HTTP 存在的问题
- HTTP在传输数据时,每次都需要重新建立连接,增加了大量的延迟时间,特别是在移动端更为突出。
- 传输数据时所有内容都是明文,客户端和服务器端都无法验证对方的身份,一定程度上无法保证数据的安全性。
- header里携带的内容过大,增加了传输的成本,并且每次请求header基本不怎么变化,尤其在移动端增加用户流量。
- 虽然HTTP支持keep-alive 来弥补多次创建连接产生的延迟,但是keep-alive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站),keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。
HTTPS
网景在1994年创建了HTTPS,并应用在网景导航者浏览器中。HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时(其实两个是一个东西,只是名字不同而已)
简单来说,HTTPS就是安全版的HTTP,chrome和firefox都大力支持网站使用HTTPS,苹果也在ios 10系统中强制app使用HTTPS来传输数据。* SSL(Secure Sockets Layers): 安全套接层
* TLS(Transport Layer Security): 传输层安全为网络通信提供安全及数据完整性的一种安全协议。两者在传输层对网络连接进行加密
HTTPS 和 HTTP 的区别
- HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都经过加密的。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。
SPDY
Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。谷歌表示,引入SPDY协议后,在实验室测试中页面加载速度比原先快64%。
SPDY可以说是综合了HTTPS和HTTP两者有点于一体的传输协议,解决的问题如下:
- 通过多路复用降低延迟,单个TCP连接支持并发的HTTP请求。
- 请求优先级。SPDY允许给每个request设置优先级,这样重要的请求就会优先得到响应,防止在网络通道被非关键资源堵塞时,高优先级的请求被挂起。
- 压缩 header 报头和去掉不必要的头部来减少当前HTTP使用的带宽。
- 基于HTTPS的加密协议传输,强制使用SSL,让SSL协议在现存的网络设施下有更好的安全性和兼容性。
- 服务端推送。允许服务器在需要时发起对客户端的连接并推送数据。
SPDY构成图
HTTP1.1 特性
- 默认持久连接节省通信量,只要客户端服务端任意一端没有明确提出断开TCP连接,就一直保持连接,可以发送多次HTTP请求
- 管线化,客户端可以同时发出多个HTTP请求,而不用一个个等待响应
- 断点续传原理
HTTP2.0
HTTP2.0可以说是SPDY的升级版(其实原本也是基于SPDY设计的),但是,HTTP2.0 跟 SPDY 仍有不同的地方,主要是以下两点:
- HTTP2.0 支持明文 HTTP 传输,而 SPDY 强制使用 HTTPS
- HTTP2.0 消息头的压缩算法采用 HPACK,而非 SPDY 采用的 DEFLATE
参考: