HTTP/1.1 Range和Content-Range
来源:互联网 发布:怎么调整睡眠时间 知乎 编辑:程序博客网 时间:2024/06/07 04:59
假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分,比如4个部分,然后创建4个线程,每个线程负责下载一个部分,如果文件大小为403个byte,那么你的分割方式可以为:0-99 (前100个字节),100-199(第二个100字节),200-299(第三个100字节),300-402(最后103个字节)。
分割完成,每个线程都明白自己的任务,比如线程3的任务是负责下载200-299这部分文件,现在的问题是:线程3发送一个什么样的请求报文,才能够保证只请求文件的200-299字节,而不会干扰其他线程的任务。这时,我们可以使用HTTP1.1的Range头。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的:
表示头500个字节:Range: bytes=0-499
表示第二个500字节:Range: bytes=500-999
表示最后500个字节:Range: bytes=-500
表示500字节以后的范围:Range: bytes=500-
第一个和最后一个字节:Range: bytes=0-0,-1
同时指定几个范围:Range: bytes=500-600,601-999
所以,线程3发送的请求报文必须有这一行:
Range: bytes=200-299
服务器接收到线程3的请求报文,发现这是一个带有Range头的GET请求,如果一切正常,服务器的响应报文会有下面这行:
HTTP/1.1 206 OK
表示处理请求成功,响应报文还有这一行
Content-Range: bytes 200-299/403
斜杠后面的403表示文件的大小,通常Content-Range的用法为:
. The first 500 bytes:
Content-Range: bytes 0-499/1234
. The second 500 bytes:
Content-Range: bytes 500-999/1234
. All except for the first 500 bytes:
Content-Range: bytes 500-1233/1234
. The last 500 bytes:
Content-Range: bytes 734-1233/1234
分割完成,每个线程都明白自己的任务,比如线程3的任务是负责下载200-299这部分文件,现在的问题是:线程3发送一个什么样的请求报文,才能够保证只请求文件的200-299字节,而不会干扰其他线程的任务。这时,我们可以使用HTTP1.1的Range头。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的:
表示头500个字节:Range: bytes=0-499
表示第二个500字节:Range: bytes=500-999
表示最后500个字节:Range: bytes=-500
表示500字节以后的范围:Range: bytes=500-
第一个和最后一个字节:Range: bytes=0-0,-1
同时指定几个范围:Range: bytes=500-600,601-999
所以,线程3发送的请求报文必须有这一行:
Range: bytes=200-299
服务器接收到线程3的请求报文,发现这是一个带有Range头的GET请求,如果一切正常,服务器的响应报文会有下面这行:
HTTP/1.1 206 OK
表示处理请求成功,响应报文还有这一行
Content-Range: bytes 200-299/403
斜杠后面的403表示文件的大小,通常Content-Range的用法为:
. The first 500 bytes:
Content-Range: bytes 0-499/1234
. The second 500 bytes:
Content-Range: bytes 500-999/1234
. All except for the first 500 bytes:
Content-Range: bytes 500-1233/1234
. The last 500 bytes:
Content-Range: bytes 734-1233/1234
- HTTP/1.1 Range和Content-Range
- HTTP/1.1 Range和Content-Range
- HTTP/1.1 Range和Content-Range
- HTTP/1.1 Range和Content-Range
- HTTP/1.1 Range和Content-Range
- range和content-range
- Http头 Range、Content-Range
- Http头 Range、Content-Range
- HTTP Header里的Range和Content-Range参数
- HTTP Header里的Range和Content-Range参数
- Http协议头 Range、Content-Range分析
- Http头 Range、Content-Range【断点续传】
- Content-Range HTTP 下载文件
- Range和Content-Range实体头
- Http/1.1协议 Content-Range头 用于http断点续传
- http断点续传原理:http头 Range、Content-Range
- http断点续传原理:http头 Range、Content-Range
- http断点续传原理:http头 Range、Content-Range
- typedef int(init_fnc_t) (void) 和 typedef int(*init_fnc_t) (void);
- 实现一个具有百度文库文档转换功能的工具类
- 几种极其隐蔽的XSS注入的防护
- String.format函数使用方法介绍
- 游戏专用的stage按键监听
- HTTP/1.1 Range和Content-Range
- 基于UDP的DatagramSocket通信
- 如何在Ubuntu上搭建Cloud Foundry网站运行环境
- can't open /sdcard/update.zip(bad)
- hdu 3369 Cross the Wall
- 转载android常见错误。
- MP3 Actionscript 3.0 核心代码实现
- 将asp文件上传到server后遇到'Could not load type'的错误原因
- HIBERNATE hql 循环显示第一语句