node.js - Google 忽略 HTTP GET 的 "Range" header ?

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

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

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',
            }
        })

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

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

最佳答案

jterrace请注意,服务器忽略了我的 Ragne 请求,因为我拉取的对象小于 HTTP 规范阈值。当在较大的对象(例如 3mb)上测试它时,它在请求部分文件时工作得很好。返回的内容大小显示在 content-length header 中。

关于node.js - Google 忽略 HTTP GET 的 "Range" header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34000891/

相关文章:

javascript - react native 语法错误 : Unexpected Token, 预期}

node.js - 尽管成功 echo $variable,NodeJs/etc/environment 仍看不到文件更改

javascript - 通过 node.js 在 HTML 中使用非内联 javascript

java - Guava 的 RangeSet/Range 中没有 "size"的概念?

hashmap - 如何将一系列数字散列到散列表中的单个位置

javascript - String.replace 回调不起作用

c# - 无法获取 head 的内部内容,因为内容不是字面意思。 - 尝试附加到标题

c - 为什么c中需要头文件

c++ - SFML 2.1 和 Xcode 4.6.3 - "The specified SDK "当前 OS X“似乎没有安装所有必要的 header 。”

javascript - 如何在 Range 的末尾插入节点?