HTTP各版本简介
简介
HTTP(Hyper Text Transfer Protocol)即超文本传输协议,是一种用于客户端与服务端进行信息交换的通信协议;
特点:
- 简单
- 无状态:http本身是无状态协议,通过Http Cookie实现了有状态的会话;
- 连接:一般基于TCP连接,请求的默认端口号是80(HTTPS默认端口号443);
版本及特点
-
HTTP/0.9 —— 单行协议
特点:- 请求不包含版本号信息,仅支持
get
请求; - 协议由单行指令构成:
GET /index.html
; - 响应无Header及状态码,仅包括HTML文档本身;
- 请求不包含版本号信息,仅支持
-
HTTP/1.0 —— 构建可扩展性
特点:- 协议版本随GET行发送;
- 引入HTTP头,请求或相应为多行指令构成;包括:
Allow
/Authorization
/content-type
/content-coding
/content-length
/Date
/Expires
/From
/If-modified-Since
/Last-Modified
/Location
/Pragma
/Referer
/Server
/User-Agent
/WWW-Authenticate
等; - 支持更多的请求方法:
GET
/HEAD
/POST
; - 支持更多的资源类型:html、图片、音视频等;
- 引入状态码:
缺点:
- HTTP请求基于TCP连接,HTTP/1.0协议中每次请求均需要建立TCP连接,不可服用;
- 安全性:是一种无状态协议,身份认真需要通过HTTP Cookie,明文传输数据,因此具有被攻击的危险;
- 协议开销大:头部信息过大后,每次请求都会携带这些信息;不仅造成带宽浪费,也会增加服务延时;
-
HTTP/1.1 —— 标准化的协议
特点:- 长连接:HTTP/1.1默认采用长连接,即同域名下建立一个TCP连接用于多次通信和数据传输;
- 管道化:持久化连接中,可以不用等一个请求被响应后再发送请求,可以连续发送多个请求;当然,服务端的响应顺序是与请求顺序保持一致的;
- 引入新的缓存机制:引入
cache-control
机制; - 内容协商机制:客户端与服务端约定请求的方法、语言、编码类型等信息;使用
Accept
/Accept-Language
/Accept-Encoding
等; - 分块传输编码:支持
Chunked Transfer Coding
,对响应数据进行分块传输,每个chunk
包含其大小及数据(均为十六进制),size信息独占一行;可以用于动态处理内容的传输;使用头部Transfer-Encoding: chunked
标识;最后一个chunk
仅包含size信息,用于告知数据传输完成; - 更加丰富的请求方法:
OPTIONS
/GET
/HEAD
/POST
/PUT
/DELETE
/TRACE
/CONNECT
; - 新增状态码
-
HTTP/2.0 —— quicker、better、safer
特点:- 头部压缩:使用HPACK算法,减少每次传输不必要的头部信息;它的实质就是一种diff算法;客户端和服务端同时维护一张保存头信息的表,并在每次通信后同步更新;首次请求会保存全部字段;之后只需要传输差别信息即可;
2. 二进制分帧:HTTP/2.0的每个请求或响应称为消息,每个消息分为一个或多个帧,采用效率更高的二进制而不是文本格式进行编码传输;
3. 多路复用:同域名下建立一个TCP连接,该连接可以用于多个请求的处理;
4. Server Push:即客户端请求一个页面后,服务端在未接受到后续请求时就返回响应请求,以及通过页面解析发现的客户端后续可能用到的资源,如图片、css、js等;
- 头部压缩:使用HPACK算法,减少每次传输不必要的头部信息;它的实质就是一种diff算法;客户端和服务端同时维护一张保存头信息的表,并在每次通信后同步更新;首次请求会保存全部字段;之后只需要传输差别信息即可;