在编写 HTTP/1.1 服务器时,我在处理多个范围请求时陷入困境。
RFC 2616 的第 14.35.1 节引用了一些示例,但没有阐明服务器行为。
例如:
GET /some/resource HTTP/1.1
...
Range: bytes=200-400,100-300,500-600
...
我应该返回这个确切的字节序列吗?
或者我应该合并所有范围,发送100-400,500-600
?
或者在中间发送所有内容,100-600
?
最糟糕的是,检查时Content-Range
响应头(第 14.16 节),只能返回单个范围,所以我想知道服务器将如何响应第 14.35.1 节中的示例bytes=0-0,-1
!!!
我的服务器应该如何处理此类请求?
我刚刚查看了其他支持该功能的服务器Range
标头字段可能会响应并快速执行curl
to example.com http://www.example.com:
~# curl -s -D - -H "Range: bytes=100-200, 300-400" http://www.example.com
HTTP/1.1 206 Partial Content
Accept-Ranges: bytes
Content-Type: multipart/byteranges; boundary=3d6b6a416f9b5
Content-Length: 385
Server: ECS (fll/0761)
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 100-200/1270
eta http-equiv="Content-type" content="text/html; charset=utf-8" />
<meta name="vieport" content
--3d6b6a416f9b5
Content-Type: text/html
Content-Range: bytes 300-400/1270
-color: #f0f0f2;
margin: 0;
padding: 0;
font-family: "Open Sans", "Helvetica
--3d6b6a416f9b5--
显然,您正在寻找的是Content-Type: multipart/byteranges; boundary
响应头。谷歌搜索正是出现的包含 RFC 2616 附录的 W3C 文档 http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html
当 HTTP 206(部分内容)响应消息包含多个范围的内容时(对请求的响应)多个不重叠范围),它们作为多部分消息正文传输。用于此目的的媒体类型称为“multipart/byteranges
".
The multipart/byteranges
媒体类型包括两个或多个部分,每个部分都有自己的Content-Type
and Content-Range
字段。所需的边界参数指定用于分隔每个主体部分的边界字符串。
所以就这样吧。
顺便说一下,服务器位于example.com http://www.example.com不检查重叠的字节范围并准确地向您发送您请求的范围...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)