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

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

时间2025-07-30 00:40:53分类IT科技浏览4232
导读:分类: 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
对象存储oss的应用场景(对象存储OSS之ossbrowser的使用) seo策略主要包括(解密SEO策略与营销方案的不同之处)