内容范围和范围标题之间的区别?

los*_*sit 68 http http-headers

HTTP标头内容范围和范围之间有什么区别?什么时候应该使用?

我正在尝试从特定字节偏移量流式传输音频文件.我应该使用Content-Range还是Range标头?

谢谢

bti*_*mby 126

实际上,接受的答案并不完整.Content-Range不仅用于响应.在提供实体机构的请求中也是合法的.

例如,HTTP PUT提供实体主体,它可能只提供实体的一部分.因此,PUT请求可以包括向服务器指示应该将部分实体主体合并到实体中的内容范围标头.

例如,让我们首先使用HTTP创建然后附加到文件:

要求1:

PUT /file HTTP/1.1
Host: server
Content-Length: 1

a
Run Code Online (Sandbox Code Playgroud)

要求2:

PUT /file HTTP/1.1
Host: server
Content-Range: bytes 1-2/*
Content-Length: 1

a
Run Code Online (Sandbox Code Playgroud)

如何,让我们看看文件的内容......

要求3:

GET /file HTTP/1.1
Host: server

HTTP/1.1 200 OK
Content-Length: 2

aa
Run Code Online (Sandbox Code Playgroud)

这允许随机文件访问,包括HTTP上的READING和WRITING.我只是想澄清一下,因为我正在研究在我正在开发的WebDAV客户端中使用Content-Range,所以这些扩展的信息可能对其他人有用.

  • 该评论不正确.RFC2616(http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.16)不会将`Content-Range`标头限制为请求,但会将其绑定到"部分实体主体" .实际上,使用该功能可以方便上传恢复或分块上传. (13认同)
  • Content-Range在请求中不合法. (7认同)
  • @ BeniCherniavsky-Paskin查看https://tools.ietf.org/html/rfc7231而不是4.3.4节中的草稿版本我看到"允许PUT在给定目标资源上的原始服务器必须发送400(错误请求) )响应包含Content-Range头字段(...)的PUT请求.当然,RFC的作者只是人类,他们确实犯了错误,而且RFC确实在痛苦中演变,但很明显,Content-Range标题并不意味着在请求中使用,也没有多大意义. (6认同)
  • 我认为`Content-Range`可以在请求中使用.请参阅PUT方法部分:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6 - `实体的接收者不得忽略任何内容 - *(例如内容范围)在这种情况下,它不理解或实现并且必须返回501(未实现)响应. - 请求可能包含`Content-Range`标头,服务器应该考虑它. (3认同)
  • @nietaki当然,但这并不是说它实际上正如回答者描述的那样 - 我的意思是,这是一个保证501. (2认同)

Bri*_*ell 79

在请求中使用范围来请求特定范围(或范围)的字节.Content-Range用于响应,以指示服务器给您的字节数(可能与您请求的范围不同),以及整个内容的长度(如果已知).

  • 阅读下面的btimby答案. (7认同)
  • @BrianCampbell你当然是对的.我只是想为后人记录我的发现.我编辑了我的答案,以确保它不会给人的印象是你的答案有任何错误. (3认同)
  • @btimby不是问题!感谢您提供更完整的解释; 如果您从Google搜索中找到该页面,它总是很有用. (3认同)
  • @BrunoMartinez虽然你可以在请求中使用Content-Range,但是从OP问的有关下载具有特定范围的内容的问题中可以很清楚.我根据OP的要求回答,而不是试图全面描述可以使用Content-Range的每个案例. (2认同)