【问题标题】:Google ignores "Range" header for HTTP GET?Google 忽略 HTTP GET 的“范围”标头?
【发布时间】:2015-12-07 15:55:33
【问题描述】:

我正在使用 Google Cloud Storage XML API 下载对象。与标准 HTTP 协议和 as mentioned in Google's docs 一样,我可以指定 Range 标头来仅下载特定范围的对象。在尝试了几个对象(文件)之后,API 总是返回完整的数据,我试图在单个请求中避免这种情况。我在 Node.js 上使用请求模块(作为 bluebird 的承诺),所以它看起来像这样:

var url = 'https://{bucket}.storage.googleapis.com/{object}'
        .replace( '{bucket}', this._bucket )
        .replace( '{object}', file.name );

var bearer = 'Bearer {t}'.replace( '{t}', this._token );
return request.getAsync( { url: url,
            headers: {
                'Authorization': bearer,
                'Range': 'bytes=0-100',
            }
        })

响应数据返回成功,但不在我指定的范围内。它只是作为所有数据的完整块返回。我在请求配置中遗漏了什么吗?

我担心文件的内容长度会超过几 kb,在这种情况下会溢出内存。

【问题讨论】:

  • 我认为当对象太小而无法提供范围并且将返回整个内容时可能存在阈值(顺便说一句,这符合 HTTP 规范)。你可以试试大物体吗?
  • @jterrace 我正在一个不属于我的存储桶上进行测试,因此使用大对象对其进行测试是有问题的(最大的文件约为 75kb )。有没有不同的方法来测试这个?另外,我在 HTTP 规范中搜索了这个主题,但找不到符合要求的描述..
  • 来自第 14.35.2 节 - “服务器可以忽略 Range 标头。”
  • 你能用一个大对象创建自己的存储桶进行测试吗?
  • 您可以尝试使用 gs://pub 存储桶进行测试

标签: node.js header range google-cloud-storage bluebird


【解决方案1】:

正如jterrace 所说,服务器忽略了我的 Ragne 请求,因为我提取的对象小于 HTTP 规范阈值。在较大的对象(例如 3mb)上对其进行测试时,它在请求文件的某些部分时运行良好。返回的内容大小显示在content-length 标头中。

【讨论】:

    猜你喜欢
    • 2021-12-08
    • 2011-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多