HTTP1.0、1.1和2.0区别
Http原理请点击阅读 点击查看
HTTP 1.0
Http1.0是老的HTTP协议标准,规定了客户端和服务器只能保持短暂的连接,请求完成后就完毕,每次客户端请求都需要建立一次TCP连接,请求完就断开,不保存每次请求的状态。由于连接和关闭会消耗大量服务器和客户端资源,严重影响了客户端和服务端的性能。例如加载一个网页地址,有很多JS和CSS文件,每次请求都建立一次TCP连接,大大的影响了浏览器的性能。连接无法复用和head of line blocking(会导致带宽无法被充分利用,以及后续健康请求被阻塞)这两个问题深受广大开发者抱怨。
HTTP 1.1
为了解决1.0的缺陷。HTTP1.1支持了持久化连接(能够复用同一个TCP连接),HTTP/1.1的默认模式使用带流水线的持久连接,减少了建立和关闭连接的消耗和延迟。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。
在http1.1中header字段里增加了connection字段,可用于请求完成后主动关闭TCP持久连接。客户端和服务端均可能通过connection=close来控制连接的关闭,也可以用connection=Keep-Alive来表明使用长连接
HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。HTTP 1.1通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。增加了host请求头字段来表明需要访问WEB服务器的哪个站点。
HTTP 1.1提供能range请求头字段来支持断点续传
HTTP 1.1还提供了user-agent来用于身份识别
HTTP 1.1也提供与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
SPDY协议
对HTTP 1.1的优化
1.支持多路复用(降低延迟)
2.支持头部压缩
3.请求优先级
4.基于HTTPS的加密协议传输
5.服务端推送
HTTP 2.0
当前协议较1.1版本有较大的性能提升,而且新支持了很多功能
二进制格式
HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
多路复用
HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。当然HTTP1.1也可以多建立几个TCP连接,来支持处理更多并发的请求,但是创建TCP连接本身也是有开销的。TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功过,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。
头部压缩
HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。
服务端推送
我的网页有一个sytle.css的请求,在客户端收到sytle.css数据的同时,服务端会将sytle.js的文件推送给客户端,当客户端再次尝试获取sytle.js时就可以直接从缓存中获取到,不用再发请求了