HTTP/1.1 Range和Content-Range

HTTP/1.1 Range和Content-Range(注:转载于http://www.91linux.com/html/article/program/cpp/20090411/16420.html)

假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分,比如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

时间: 2024-11-08 02:29:23

HTTP/1.1 Range和Content-Range的相关文章

nyoj 517-最小公倍数 (python range(start, end) range(length))

517-最小公倍数 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:11 难度:3 题目描述: 为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致. 但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多. 事实上,它是1至6的每个数字的倍数.即1,2,3,4,5,6都是可以除尽60. 我们希望寻找到能除尽1至n的的每个数字的最小整数m. 输入描述: 多组测试数据(少于500组). 每行只有一个数n(1<=n<=100). 输出描述: 输出相应的m.

HTML5 编辑 API 之 Range 对象(二)

1.Range.cloneContents()The Range.cloneContents() returns a DocumentFragment copying the objects of type Node included in the Range. SyntaxdocumentFragment = range.cloneContents(); Examplerange = document.createRange();range.selectNode(document.getEle

input range样式更改,模拟滑块

input range 样式更改,js模拟滑块实时更新数据. 效果图: html 代码: <div> <input type="range" min="0" max="5" step="0.1" value="0"> <span class="lightgray"></span> <span class="value&quo

[H5]range对象的setStart/setEnd方法

1.setStart:表示某个节点的range对象的起点位置;2.setEnd:表示某个节点的range对象的结束位置; 示例如下:<body> <div id="div"> 这里是第一段文字 </div> <input type="butt on" onclick="dele()" value="删除"> <script> function dele() { var

Notes: DOM Range

通过DOM范围可以选择文档中的某个区域,而不需考虑节点的界限,例如文本高亮的处理就可以使用范围来实现. 1.Range的创建 使用document的createRange来创建一个范围,该方法返回一个Range实例,该实例有很多属性和方法,如下所示: startContainer:包含范围起点的节点 startOffset:范围起点在startContainer中的偏移量,既节点索引 endContainer:包含范围终点的节点 endOffset:范围终点在endContainer的偏移量,节

&lt;input type="range"&gt;标签用法实例代码

<input type="range">标签用法实例代码: 在HTML5中,又新增许多新<input>控件类型,比较实用的一个就是<input type="range">,以滑竿的方式来调整value值,在这以前需要通过模拟才能够实现,下面就通过代码实例介绍一下它的作用. 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf

区分range() , np.arange() , np.linspace()

content: range() np.arange() np.linspace() 一.range(start, stop, step) 1.range() 为 python 自带函数 2.生成一个从start(包含)到stop(不包含),以step为步长的序列.返回一个 list 对象 range(stop) 返回 range object range(start, stop[, step]) 返回 range object 3.start默认为0,stop是必须的,step默认为1,可正可

xrange() 与 range() 的对比与总结

一,两个函数的文档: 1,xrange(): xrange(stop) xrange(start, stop[, step]) This function is very similar to range(), but returns an xrange object instead of a list. This is an opaque sequence type which yields the same values as the corresponding list, without

【LeetCode】201. Bitwise AND of Numbers Range

Bitwise AND of Numbers Range  Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND of all numbers in this range, inclusive. For example, given the range [5, 7], you should return 4. Credits:Special thanks to @amrsaqr for a

Range对象

Range对象代表工作表中的单元格或单元格区域,包含在worksheet对象中. 引用Range: 直接写清楚哪个工作簿下的哪个表格下的哪个单元格即可.o( ̄▽ ̄)d Worksheets("sheet1").Range("D3").select 可以选中区域:Range("A1:D3").select 如果定义一个区域,如: Dim n As String n="A1:D3" Range(n).select 如果要引用多个不