HTTP 各版本特点与区别
HTTP 各版本一览表
版本 | 功能 | 备注 |
---|---|---|
0.9 | 仅支持 Get 仅能访问 HTML 格式资源 | 简单单一 |
1.0 | 新增POST,DELETE,PUT,HEADER等方式 增加请求头和响应头概念,指定协议版本号,携带其他元信息(状态码、权限、缓存、内容编码) 扩展传输内容格式(图片、音视频、二进制等都可以传输) | 存活时间短 |
1.1 | 长连接:新增 Connection 字段,可以通过keep-alive 保持长连接管道化:一次连接就形成一次管道,管道内进行多次有序响应。允许服务端发生多次请求,但是响应按序返回 缓存处理:新增 cache-control 断点续传 状态码增加 | 当前主流版本号 存在Header 重复问题 |
2.0 | 二进制分帧:数据体和头信息可以都是二进制,统称帧 多路复用与数据流:能同时发送和响应多个请求,通过数据流来传输 头部压缩:对 Header 进行压缩,避免重复浪费 服务器推送:服务器可以向客户端主动发送资源 | 2005发布 |
HTTP 1.1
长连接
HTTP/1.1 最大的变化就是引入了持久连接(persistent connection),在HTTP/1.1中默认开启 Connection: keep-alive
,即TCP连接默认不关闭,可以被多个请求复用。
客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close,明确要求服务器关闭TCP连接。客户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。不过,规范的做法是,客户端在最后一个请求时,发送Connection: close
,明确要求服务器关闭TCP连接。
断点续传
Header 字段
服务端
Accept-Ranges:表示服务器支持断点续传,并且数据传输已字节为单位
Etag:资源的唯一 tag 后端自定义,验证文件是否修改过。修改过就重新重头传输
Last-Modified:文件上次修改时间
Content-Range:返回数据范围
客户端
If-Range:服务器给的 Etag 值
Range:请求的数据范围
If-Modified-Since: 将服务器响应的 Last-Modified 保存, 下次发送可以携带,后台接受判断文件是否修改,没有可以返回 304状态码,叫客户端使用缓存数据,避免重复发出资源。
流程
注意:断点续传后台返回状态码为 206。
Tip: 断点续传与分块编码传输(主要解决长度没有告知)不一致
HTTP2
二进制分帧
HTTP 1.1及之前版本, 头信息基于文本,数据体可以是文本或者二进制,HTTP2.0 数据体和头信息可以都是二进制,统称为’帧’,即头信息帧和数据帧,且HTTP2.0把通信基本单位缩小为帧。
多路复用
通过单一的 HTTP2.0连接连续发起多重请求-响应消息,即客户端和服务器可以同时发送多个请求和响应,而不用顺序一一对应。
HTTP消息被分为独立的帧,乱序发送,接收端根据标识符号和首部将信息重新组装起来。
数据流
因为 HTTP/2 的数据包是不按顺序发送的,同一个连接里面连续的数据包,可能属于不同的回应。因此,必须要对数据包做标记,指出它属于哪个回应。HTTP/2 将每个请求或回应的所有数据包,称为一个数据流(stream)。每个数据流都有一个独一无二的编号。数据包发送的时候,都必须标记数据流ID,用来区分它属于哪个数据流。
另外还规定,客户端发出的数据流,ID一律为奇数,服务器发出的,ID为偶数。数据流发送到一半的时候,客户端和服务器都可以发送信号(RST_STREAM
帧),取消这个数据流。HTTP/1.1取消数据流的唯一方法,就是关闭TCP连接。这就是说,HTTP/2 可以取消某一次请求,同时保证TCP连接还打开着,可以被其他请求使用。客户端还可以指定数据流的优先级。优先级越高,服务器就会越早回应。
头部压缩
为什么要压缩?
由于头信息使用文本,没有压缩,请求时候会来回重复传递,造成流量浪费。
头部压缩技术原理
头部压缩需要支持 HTTP2的浏览器和服务器之间:
- 维护一份相同的静态字典(包含常见的头部名称,以及常见的头部名称与值的组合)
- 维护一份相同的动态字典,动态添加内容(即实际的 Header 值)
- 支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding)
原理图:
总结: 通过映射表,传递对应编码和值来达到压缩。
默认什么情况下使用同一个连接
- 同一个域名下的资源
- 不同域名但是满足两个条件:1)解析到同一个 IP;2)使用同一个证书
参考
HTTP 各版本区别,HTTP2的新特性 – 语雀 - lx70770:简述各版本特点区别
HTTP文件传输-断点续传原理 – 跳墙网 - 神秘网友:头信息字段和流程列举。