需求背景
动态创建的文件下载的时候希望浏览器显示下载进度
动态创建的文件希望能够分段下载
HTTP断点续传报文
要实现HTTP断点续传必须要简单了解以下几个报文。
Accept-Ranges 告诉客户端(浏览器..)服务器端支持断点续传 服务器端返回
Range 客户端告诉服务器端从指定的的位置/范围(这里值字节数)下载资源 客户端发出
Content-Range 服务器端告诉客户端响应的数据信息,在整个返回体中本部分的字节位置 服务器端返回
ETag 资源标识 非必须 服务器端返回
Last-Modified 资源最后一次更新的时间 非必须 服务器端返回
Range 的范围格式
表示0-499个字节范围:Range: bytes=0-499
表示最后500个字节范围:Range: bytes=-500
表示500字节开始到结束范围:Range: bytes=500-
表示第一个和最后一个字节:Range: bytes=0-0,-1
表示同时指定几个范围:Range: bytes=500-600,601-999
Content-Range 的数据格式
Content-Range: bytes 0-499/22036 :表示返回0-499字节范围数据 资源一共22036个字节
原理
客户端发起请求 设置Range指定开始字节数或结束字节数 如果是从0开始也可以不用设置。
服务器端检查到客户端Range头 解析开始字节数以及结束字节数 并返回报文头 Accept-Ranges表示支持断点续传,Content-Range记录该次向客户端写入流的位置信息,然后再写入流到客户端。