断点续传-http中Header参数Range(分段请求基础)

这篇具有很好参考价值的文章主要介绍了断点续传-http中Header参数Range(分段请求基础)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


需要用到几个http头
  • range
  • if-range
  • content-range
  • accept-range

断点续传的优缺点

  • 好处:防止大文件下载过程出现网络异常,而前功尽弃。
  • 缺点:要发起多次请求,资源占用大,相对复杂

Range请求头信息介绍

Range

告知服务端,客户端下载该文件想要从指定的位置开始下载,至于 Range 字段属性值的格式有以下几种:

Range主要用来设置获取数据的范围,格式如下:

Range: <unit>=<range-start>-<range-end>
Range: <unit>=<range-start>-<range-end>, <range-start>-<range-end>, <range-start>-<range-end>

<unit> 类型,一般来说是bytes;
<range-start> 表示范围的起始值,一般是数字,如果不是数字就看服务端逻辑如何处理;
<range-end> 表示范围的结束值。这个值是可选的,如果不存在,表示此范围一直延伸到文档结束,如果非数字,同上。

例子

Range:bytes=0-500   
表示下载从0500字节的文件,即头500个字节  ,[0-500]前闭后闭。0<=range<=500 
    
Range:bytes=501-1000
表示下载从5001000这部分的文件,单位字节       

Range:bytes=-500
表示下载最后的500个字节      
     
Range:bytes=500-
表示下载从500开始到文件结束这部分的内容   
 
Range:bytes=500-600,700-1000
表示下载这两个区间的内容

If-Range

If-Range用于判断实体是否发生改变,如果实体未改变,服务器发送客户端丢失的部分,否则发送整个实体.

If-Range 可以使用 Etag 或者Last-Modified 返回的值。当没有 ETag 却有 Last-modified 时,可以把 Last-modified 作为 If-Range 字段的值。
如果请求报文中的 Etag与服务器目标内容的 Etag相等,即没有发生变化,那么应答报文的状态码为 206。如果服务器目标内容发生了变化,那么应答报文的状态码为 200。

http header range,http,网络协议,网络

响应头

Content-Range

Content-Range表示响应数据的内容范围,语法格式如下:

Content-Range: <unit> <range-start>-<range-end>/<size>Content-Range: <unit> <range-start>-<range-end>/*Content-Range: <unit> */<size>
<unit> 类型,一般来说是bytes;
<range-start> 区间的起始值;
<range-end> 区间的结束值;
<size> 整个文件的大小(如果大小未知则用 "*" 表示)

例子

Content-Range:bytes 501-1000/2000
#501-100 请求头里range的值
#2000 文件总大小
#bytes 字节方式

Last-Modified:表示资源最近修改的时间(分段下载时要注意这个东西,因为如果修改了,分段下载可能就要重新下载了)
ETag:这个响应头表示资源版本的标识符,通常是消息摘要(类似MD5一样)(分段下载时要注意这个东西,或者缓存控制也要注意这个东西)
注意,每种服务器对生成ETag的算法不同,这个要特别注意 如果使用分布式缓存,要特别要保证每台服务器生成的ETag算法是一致的.
缓存的过期,要同时结合(ETag + Last-Modified)这两个响应头来判断.
强ETag
只要实体发生任何改变,都会改变ETag值.如:
ETag: "1234234234"
弱ETag
它在前面会有个W/,如:
ETag: W/"12342423"

Accept-Ranges

Accept-Ranges用于服务器响应,告诉浏览器是否支持Range
语法:文章来源地址https://www.toymoban.com/news/detail-859284.html

Accept-Ranges: bytesAccept-Ranges: none
  • none不支持任何范围请求单位,由于其等同于没有返回此头部,因此很少使用。不过一些浏览器,比如IE9,会依据该头部去禁用或者移除下载管理器的暂停按钮;
  • bytes 一般情况

到了这里,关于断点续传-http中Header参数Range(分段请求基础)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java-SpringBoot-Range请求头设置实现视频分段传输

    老实说,人太懒了,现在基本都不喜欢写笔记了,但是网上有关Range请求头的文章都太水了 下面是抄的一段StackOverflow的代码...自己大修改过的,写的注释挺全的,应该直接看得懂,就不解释了 写的不好...只是希望能给视频网站开发的新手一点点帮助吧. 业务场景:视频分段传

    2023年04月19日
    浏览(28)
  • lazarus、delphi文件Http下载断点续传的实现

    下载大文件时,断点续传是很有必要的,特别是网速度慢且不稳定的情况下,很难保证不出意外,一旦意外中断,又要从头下载,会很让人抓狂。断点续传就能很好解决意外中断情况,再次下载时不需要从头下载,从上次中断处继续下载即可,这样下载几G或十几G大小的一个

    2024年02月13日
    浏览(39)
  • tp6框架中Http类 请求的header、body参数传参 及post、file格式

    引入Http类: 在需要使用的地方引入Http类: use thinkfacadeHttp; GET请求示例: $response = Http::get(\\\'https://example.com/api/resource\\\');  设置Header参数: $headers = [ \\\'Authorization\\\' = \\\'Bearer YourAccessToken\\\', \\\'Content-Type\\\' = \\\'application/json\\\', ]; $response = Http::header($headers)-get(\\\'https://example.com/api/resource\\\'); POST请

    2024年01月19日
    浏览(37)
  • 老大加需求:做一个支持超大文件 HTTP 断点续传的上传服务,我懵逼了~

    作者: 大飞飞鱼 来源: blog.csdn.net/ababab12345/article/details/80490621 最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件(大都数是4GB以上)的http上传,并且要求支持http断点续传。笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文

    2024年02月08日
    浏览(35)
  • 【前端面试】中大文件上传/下载:中等文件代理服务器放行+大文件切片传输+并发请求+localstorage实现断点续传

    目录 切片上传~spark-md5 原理:流式计算+分块处理 文件标识spark-md5:A-B A.切片哈希值合并 B.首尾切片+其他切片前中后各取2M 计算hash:A-B(参考React的Fiber架构) A.线程:web-worker B.空闲:requestIdleCallback 异步并发控制:A-B(参考http2的多路复用) A.promise.allSettled() B.并发数max=

    2024年02月12日
    浏览(40)
  • http请求头部(header)详解

    通常HTTP消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。这两种类型的消息由一个起始行,一个或者多个头域,一个只是头域结束的空行和可 选的消息体组成。HTTP的头域包括通用头,请求头,响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域

    2024年02月12日
    浏览(31)
  • HTTP Header 参数详解

    关于HTTP消息头 HTTP消息头是在,客户端请求(Request)或服务器响应(Response)时传递的,位请求或响应的第一行,HTTP消息体(请求或响应的内容)是其后传输。HTTP消息头,以明文的字符串格式传送,是以冒号分隔的键/值对,如:Accept-Charset: utf-8,每一个消息头最后以回车符

    2024年04月23日
    浏览(20)
  • 【JavaEE】_HTTP请求报头header

    目录 1. Host 2. Content-Length与Content-Type 2.1 Content-Length 2.2 Content-Type 3. User-Agent(UA) 4. Referer 5. Cookie header的整体格式是“键值对”结构,一行是一个键值对,这些键值对都是HTTP定义好的、有特殊含义的。 常见的报头种类有: Host表示访问的服务器主机的地址与端口号(端口号可

    2024年02月20日
    浏览(30)
  • http请求header传中文怎么处理

    解决思路: 首先:header里传不了中文,传输以后会报错。 先将该中文进行一个编码处理,放到header的参数里,最后在代码里进行 该参数的解码。 1:对header的传参进行加码 2:将加码的参数当成请求的header请求后台 3:后台对该参数进行解码 4:返回前台,查看校验

    2024年02月15日
    浏览(27)
  • Nginx 获取自定义请求header头和URL参数

    在 ngx_lua 中访问 Nginx 内置变量 ngx.var.http_HEADER 即可获得请求头HEADER的内容。 在 nginx配置中,通过$http_HEADER 即可获得请求头HEADER的内容。 案例: 在nginx的location配置中,在获取header配置时, 须要在header名称前面加上固定前缀“http_“,并将header名称中的“-”中划线变为下划线

    2024年02月04日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包