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

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

时间2025-05-01 03:00:39分类IT科技浏览2701
导读:分类: 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
笔记本怎么打开无线网络开关(笔记本如何打开无线网络) 知名的seo快速排名多少钱(SEO快速排名法:让你的网站跻身搜索引擎前沿)