首页IT科技HTTP Range说明 lenoval的专栏 博客频道 CSDN.NET

HTTP Range说明 lenoval的专栏 博客频道 CSDN.NET

时间2025-06-13 18:38:40分类IT科技浏览3677
导读:分类: ASP.NET 2010-01-04 14:27 363人阅读 评论(0 收藏 举报 Range ...

分类:

ASP.NET

2010-01-04 14:27 363人阅读 评论(0) 收藏 举报

Range             ,是在 HTTP/1.1(http://www.w3.org/Protocols/rfc2616/rfc2616.html)里新增的一个 header field                    ,也是现在众多号称多线程下载工具(如 FlashGet             、迅雷等)实现多线程下载的核心所在              。

Range 的规范定义如下:

ranges-specifier = byte-ranges-specifier

byte-ranges-specifier = bytes-unit “=              ” byte-range-set

byte-range-set = 1#( byte-range-spec | suffix-byte-range-spec )

byte-range-spec = first-byte-pos “-                   ” [last-byte-pos]

first-byte-pos = 1*DIGIT

last-byte-pos = 1*DIGIT

(RFC2616 里充斥着这种形式的定义      ,一开始觉得挺乱       ,后来习惯了就发现其实挺科学                    ,挺好理解的:))

值得注意的就是 byte-range-set 是一个 byte-range 的集合             ,所以在实际请求中完全可能会出现如下这种形式:

Range: bytes=123-567,789-

这个数据区间是个闭合区间       ,起始值是 0                    ,所以“Range: bytes=0-1      ”这样一个请求实际上是在请求开头的 2 个字节                   。

byte-range-spec 里的 last-byte-pos 可以省略             ,代表从 first-byte-pos 一直请求到结束位置      。其实 first-byte-pos 也是可以省略的,只不过就不叫 byte-range-spec 了                    ,而是叫 suffix-byte-range-spec                    ,规范如下:

suffix-byte-range-spec = “-              ” suffix-length

suffix-length = 1*DIGIT

比如“Range: bytes=-200                    ”,它不是表示请求文件开始位置的 201 个字节             ,而是表示要请求文件结尾处的 200 个字节              。

如果 byte-range-spec 的 last-byte-pos 小于 first-byte-pos                    ,那么这个 Range 请求就是无效请求      ,server 需要忽略这个 Range 请求             ,然后回应一个 200 OK                    ,把整个文件发给 client                    。

如果 byte-range-spec 里的 first-byte-pos 大于文件长度      ,或者 suffix-byte-range-spec 里的 suffix-length 等于 0       ,那么这个 Range 请求被认为是不能满足的                    ,server 需要回应一个 416 Requested range not satisfiable      。

server 除了要能理解 Range 请求之外             ,在回应 client 时还要使用 Content-Range 来告诉 client 他到底发送了多少数据       ,Content-Range 的规范定义如下:

Content-Range = “Content-Range      ” “:       ” content-range-spec

content-range-spec = byte-content-range-spec

byte-content-range-spec = bytes-unit SP byte-range-resp-spec “/                    ” ( instance-length | “*             ” )

byte-range-resp-spec = (first-byte-pos “-       ” last-byte-pos) | “*                    ”

instance-length = 1*DIGIT

详尽的细枝末节就不在这里记述了                    ,举个例子说明一下             ,比如某文件的大小是 1000 字节,client 请求这个文件时用了 “Range: bytes=0-500             ”                    ,那么 server 应该把这个文件开头的 501 个字节发回给 client                    ,同时回应头要有如下内容:

Content-Range: bytes 0-500/1000

Range 请求的一些注意事项:

1) 不支持 Range 请求的 server 要用“Accept-Ranges: none”对 client 表明心意;server 也可以主动告诉 client “Accept-Ranges: bytes                    ”,但是 client 也可以在没有收到这个指示的前提下向 server 发 Range 请求       。

2) byte-range-set 中的区间可以是“有洞                   ”的             ,也可以是部分重叠的

3) 单区间的 byte-range-set 正常回应就可以了                    ,但是多区间 byte-range-set 需要 server 使用 multipart/byterange 来回应

Range头域

Range头域可以请求实体的一个或者多个子范围                    。例如      ,

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-99
声明:本站所有文章             ,如无特殊说明或标注                    ,均为本站原创发布             。任何个人或组织      ,在未征得本站同意时       ,禁止复制                    、盗用      、采集       、发布本站内容到任何网站                    、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益                    ,可联系我们进行处理                    。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
鼠标引起的玩游戏问题怎么解决(鼠标引起的玩游戏问题) 电脑找不到摄像头图标(在xp系统中,遇见电脑不显示摄像头图标怎么办?)