长链接
- http1.0
- 每对Request/Response都使用一个新的连接。
- 不支持断点续传,每次都从RANGE:0(http1.1新增加字段)开始
其中HTTP1.0需要在request中增加”Connection: keep-alive“ header才能够支持,而HTTP1.1默认支持 - http1.1
- 默认使用长链接,在同一个tcp链接可以传送多个http请求和响应,同时也支持更多的请求头和响应头b.允许同时在一条条件上发送多个请求,但是服务端必须按照接收请求的先后顺序发送应答包c.host请求头字段,明确标识服务器上的web站点,http1.1还提供了身份认证、状态管理和cache缓存机制相关的头
带宽优化
- HTTP/1.1中在请求消息中引入了range头域,在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。
- HTTP/1.1加入了一个新的状态码100(Continue),客户端事先发送一个只带头域的请求,拒绝发送401; 接受则发送100,客户端就可以继续发送带实体的完整请求了
消息传递
- HTTP/1.1中引入了Chunkedtransfer-coding来解决缓存完整消息带来的性能问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载
- 在HTTP/1.0中,有一个Content-MD5的头域,要计算这个头域需要发送方缓冲完整个消息后才能进行。而HTTP/1.1中,采用chunked分块传递的消息在最后一个块(零长度)结束之后会再传递一个拖尾(trailer),它包含一个或多个头域,这些头域是发送方在传递完所有块之后再计算出值的。发送方会在消息中包含一个Trailer头域告诉接收方这个拖尾的存在。
响应码
- 在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
多路复用
HTTP/1.1 协议中 「浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制,超过限制数目的请求会被阻塞;多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
头部压缩
http1.1不支持头部压缩, http2.0 支持头部压缩的hpack算法
http2.0使用二进制数据流(实现方便且健壮)
http2.0没有改变http1.1的语义,而是在http1.1的header和body重新封装了一层
流量控制
http2.0支持流量控制,和tcp的sliding window类似。http2.0 类似的使用receive window 的做法
更安全的ssl
使用tls的alpn来做协议升级,且通过黑名单机制禁用几百种不再安全的加密算法
参考
https://www.zhihu.com/question/34074946
http://blog.csdn.net/hguisu/article/details/8608888
http://blog.csdn.net/forgotaboutgirl/article/details/6936982/