HTTP/1.1对多个范围的响应



在编写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头字段的服务器可能如何响应,并对example.com:进行了快速curl

~# 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响应标头。在谷歌上搜索,发现了一份W3C文档,其中包含RFC 2616 的附录

当HTTP 206(部分内容)响应消息包括多个范围的内容(对多个不重叠范围的请求的响应)时,这些内容作为多部分消息体进行传输。用于此目的的介质类型称为"multipart/byteranges"
multipart/byteranges媒体类型包括两个或多个部分,每个部分都有自己的Content-TypeContent-Range字段。所需的边界参数指定用于分隔每个身体部位的边界字符串。

好了。

顺便说一句,example.com上的服务器不会检查重叠的字节范围,而是将您请求的范围准确地发送给您。。。

相关内容

  • 没有找到相关文章

最新更新