HTTP 各版本特点与区别

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状态码,叫客户端使用缓存数据,避免重复发出资源。

流程

Client Server 客户端向移动端请求资源 开始下载 Accept-Ranges:bytes, Etag:"xxxxxx", Last-Modified: xxxx loop [中断] 携带 If-Range: xxx, Range: xxx- 请求后面部分数据 检查资源是否修改过,如果没有,续传 Range 部分。 loop [Etag 检查] 完成断点续传 Client Server

注意:断点续传后台返回状态码为 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头部压缩技术介绍

头部压缩需要支持 HTTP2的浏览器和服务器之间:

  • 维护一份相同的静态字典(包含常见的头部名称,以及常见的头部名称与值的组合)
  • 维护一份相同的动态字典,动态添加内容(即实际的 Header 值)
  • 支持基于静态哈夫曼码表的哈夫曼编码(Huffman Coding)

原理图:

hpack-header-compression

总结: 通过映射表,传递对应编码和值来达到压缩。

默认什么情况下使用同一个连接

  • 同一个域名下的资源
  • 不同域名但是满足两个条件:1)解析到同一个 IP;2)使用同一个证书

参考

HTTP 各版本区别,HTTP2的新特性 – 语雀 - lx70770:简述各版本特点区别

HTTP 各版本特性与区别

HTTP文件传输-断点续传原理 – 跳墙网 - 神秘网友:头信息字段和流程列举。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值