内容范围标题 - 允许的单位?

时间:2012-02-28 10:24:38

标签: api http rest

这与以下内容有关: How should I implement a COUNT verb in my RESTful web service?Paging in a Rest CollectionUsing the HTTP Range Header with a range specifier other than bytes?

实际上我认为-1评级的anwser在这里是正确的https://stackoverflow.com/a/1434701/1237617

一般来说,anwsers说你可以使用自定义单位引用sec 3.12

  range-unit       = bytes-unit | other-range-unit
  bytes-unit       = "bytes"
  other-range-unit = token

但是,当您阅读HTTP规范时,请注意生产规则是:

   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 | "*" )

标题规范仅引用来自sec 3.12的字节单位,而不是范围单位,所以我认为实际上这违反规范在这里使用自定义单位。

我是否遗漏了某些东西或者流行的错误是错误的?

编辑:由于这可能不清楚,我的问题的要点是: rfc2616 sec14.16仅引用bytes-unit。它从未提及范围单位,因此范围单位生产与内容范围无关,因此只能使用字节单位。

我认为这最能解决我的担忧,虽然我需要一些时间来理解它(另外我想确保措辞有问题)。

  

这反映了一个事实,显然,第一组语法规则专门用于解析,第二组用于产生HTTP请求

感谢elgaton

4 个答案:

答案 0 :(得分:2)

如果您阅读HTTP/1.1 RFC, section 3.12,您会看到:

  

HTTP / 1.1定义的唯一范围单位是“bytes”。 HTTP / 1.1实现可以忽略使用其他单元指定的范围。

因此,引入other-range-unit令牌只是为了使服务器在接受时更“自由”。这反映了一个事实,显然,第一组语法规则专门用于解析,第二组用于生成HTTP请求,因此服务器甚至可以接受无效请求(它们将被简单地忽略),客户端只会使用普遍接受的bytes单位。

因此,我个人建议:

  1. 在充当客户端时仅使用bytes单位,
  2. 在充当服务器时接受其他单位(如果它们无效则丢弃Content-Range标题)。

答案 1 :(得分:2)

经修订的规范允许自定义范围单位。请参阅HTTPbis Part 5, Section 2

答案 2 :(得分:1)

这纯粹是个人观点,但我认为它与其他HTTP扩展(自定义方法或标题)的使用方式相当一致。以下是我如何阅读它:是的我可以使用自定义范围单位而不是,当它通过防火墙,网络代理和其他中介时被忽略时,我不应该提交错误报告。我在发送它时符合HTTP规范,当它们忽略它时它们符合HTTP。 WebDAV正确使用HTTP扩展,IMO,但由于这个原因很少在Internet上工作。正如我所说,只是个人意见。

答案 3 :(得分:0)

显然可以使用自定义单位,因为:

  

这反映了显然是第一套语法的事实   规则专门用于解析,第二个用于解析   产生HTTP请求