【问题标题】:Azure Blob Store Content-lengthAzure Blob 存储内容长度
【发布时间】:2016-08-30 09:16:34
【问题描述】:

azure blob 存储在执行字节范围请求时似乎错误地设置了内容长度。以前的版本不支持开放式请求,所以我认为通过升级到最新版本可以解决我的问题(2015-04-05)。

在这里,我对 azure blob 中的文件执行了 GET 请求并打印出标题。我希望 Content-Length 是剩余的 255 个字节,但我发现整个文件大小 (15601108255)

(server-1)➜ server-1 git:(faster_calls) ✗ curl -I http://ga4ghstore.blob.core.windows.net/testing/HG00096.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam --header "x-ms-version: 2015-04-05" --range 15601108000- HTTP/1.1 200 OK Content-Length: 15601108255 Content-Type: application/octet-stream Content-MD5: M26lWRO8Jhtyh1vSWXUwRg== Last-Modified: Tue, 26 Apr 2016 18:30:11 GMT Accept-Ranges: bytes ETag: "0x8D36E00CD845EC7" Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 x-ms-request-id: 2bf052dc-0001-013d-256d-a5a7a7000000 x-ms-version: 2015-04-05 x-ms-write-protection: false x-ms-lease-status: unlocked x-ms-lease-state: available x-ms-blob-type: BlockBlob Date: Tue, 03 May 2016 18:55:49 GMT

范围请求似乎得到了正确处理,例如,返回的有效负载具有预期的大小,但是,将标头与从亚马逊返回的相同文件的标头进行比较。 “content-length”标头是预期的“255”。

(server-1)➜ server-1 git:(faster_calls) ✗ curl -I --range 15601108000- http://s3.amazonaws.com/1000genomes/phase3/data/HG00096/alignment/HG00096.mapped.ILLUMINA.bwa.GBR.low_coverage.20120522.bam
HTTP/1.1 206 Partial Content x-amz-id-2: w6IO4ezWj2BBTkHA09D9gNRZgkmAQJ8khqc6O9t+Xr+xHmZKvwVTNd0vLCpaVcKoVl/2jZUskug= x-amz-request-id: CE8F86CD94173F51 Date: Tue, 03 May 2016 18:59:22 GMT x-amz-meta-s3cmd-attrs: uid:1000/gname:ubuntu/uname:ubuntu/gid:1000/mode:33204/mtime:1431500614/atime:1431500346/ctime:1431500614 Last-Modified: Wed, 13 May 2015 06:57:53 GMT ETag: "efd6d57b0f27974f6845f4e67a99c1a6-117" Accept-Ranges: bytes Content-Range: bytes 15601108000-15601108254/15601108255 Content-Type: application/gzip; charset=binary Content-Length: 255 Server: AmazonS3

【问题讨论】:

    标签: azure curl azure-blob-storage


    【解决方案1】:

    我刚刚在我的机器上使用 cUrl 尝试了相同的命令,如果我理解正确,当您使用 -I 选项执行 cUrl 命令时,您实际上是在发出 HEAD 请求而不是 GET 请求。本质上,您的命令是进行Get Blob Properties REST API 调用,它不会返回数据。

    所以在 Azure 的情况下响应是正确的,因为 Content-Length 响应标头应该告诉您 blob 的大小。如果您想查看返回的大小,则需要使用 -G (Get) 参数发出 cUrl 请求。然后你会看到只返回 255 个字节。

    【讨论】:

    • 谢谢高拉夫!这有帮助!亚马逊和微软似乎以不同的方式实现 HEAD 请求。我做了 curl -vG 并找到了具有正确 Content-Length 的 206。
    • 尽管如此,我仍然认为这是一个错误:“响应 HEAD 请求的 HTTP 标头中包含的元信息应该与响应 GET 请求而发送的信息相同。”(@987654322 @)
    猜你喜欢
    • 2016-12-07
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-06-27
    • 2012-07-15
    • 2021-04-14
    • 2019-02-17
    • 2014-08-24
    相关资源
    最近更新 更多