使用Range标头获取文件内容返回部分内容和后续请求不返回任何数据

时间:2016-12-15 05:35:35

标签: onedrive

使用OneDrive API获取文件内容时,我们遇到了一个不可理解的问题。

当我们使用Range标头请求文件内容时:

GET /blahblah/foobar.docx HTTP/1.1
Host: qw122q-ch3301.files.1drv.com
Accept: */*
Accept-Encoding: deflate, gzip
Range: bytes=0-77270

OneDrive返回:

HTTP/1.1 206 Partial Content
Cache-Control: no-cache
Content-Length: 18325

我们使用Web界面检查OneDrive服务器上的文件大小是否正确。通常,OneDrive会返回完整的请求内容,但从上周开始,它们会返回部分内容。但是如果我们可以通过其他API调用获得剩余部分,那就没关系了。

但是当我们发送另一个带有Range标头的请求时:

Range: bytes=18325-77270

OneDrive不返回任何数据:

HTTP/1.1 206 Partial Content
Control: no-cache
Content-Length: 0

有没有人遇到过这个问题?我无法从OneDrive开发人员文档中找到有关此问题的任何线索。请详细说明......

1 个答案:

答案 0 :(得分:0)

实际上我有一个理论,所以我打算回答一下。实际上有两个不同的问题导致了这种令人困惑的行为,因此我将分别处理每一个问题。

报告的文件大小与内容大小不匹配

  

这是使用this GitHub issue跟踪的系统的一个不幸的怪癖。 Ryan更详细地解释了here

单词文档的范围下载无法正确处理不可满足的范围

  

当请求超出实际文件大小的范围时,我们应该使用416 Requested Range Not Satisfiable失败,就像我们对“普通”文件所做的那样。但这显然不起作用。你可以在结果的Content-Range中看到有些东西搞砸了:

     

FileSize: 15 bytes
  Range Requested: bytes=15-
  Content-Range Response: bytes=15-14/15

     

Content-Range的价值显然毫无意义。

这两个问题应该导致你看到的奇怪行为。我们接近解决第一个,而第二个是未知的(至少对我而言)所以我打开了new GitHub issue来跟踪它。