【问题标题】:How to add custom response header to a response coming from azure blob?如何将自定义响应标头添加到来自 azure blob 的响应?
【发布时间】:2021-12-28 07:04:17
【问题描述】:

我正在向我的 blob 存储发出 curl 请求。

$ curl -kv 'https://myazstorage.blob.core.windows.net/myazcontainer/image.png?se=2021-11-17T09%3A23%3A23Z&sp=r&sv=2019-02-02&sr=b&sig=%fake/fake%3D' \
  --compressed \
  --output image.png

该 blob 上此请求的可用响应标头是。

Content-Length: 224250
Content-Type: image/png
Last-Modified: Tue, 16 Nov 2021 14:12:51 GMT
Accept-Ranges: bytes
ETag: "0x8D9A90B2CD4ED6B"
Vary: Origin
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0
x-ms-request-id: 39bf369d-b01e-00ca-3b94-db83fe000000
x-ms-version: 2019-02-02
x-ms-creation-time: Tue, 16 Nov 2021 14:12:51 GMT
x-ms-lease-status: unlocked
x-ms-lease-state: available
x-ms-blob-type: BlockBlob
x-ms-server-encrypted: true
Date: Wed, 17 Nov 2021 09:20:04 GMT

我想添加这两个标题。

Origin: mywebsite.com
Cross-Origin-Resource-Policy: cross-origin

如何添加适用于容器中每个 blob 的自定义响应标头?可以通过portal.azure.com接口实现吗?

【问题讨论】:

    标签: azure azure-blob-storage azure-storage


    【解决方案1】:

    AFAIK,如果您直接从 Azure 存储访问 blob,则无法添加自定义标头来响应。

    一种可能性是让您的用户通过 Web 应用程序请求 Blob,然后当 Web 应用程序发回响应时,您应该能够添加额外的标头。

    其他选项是使用 blob 元数据。如果这些自定义响应头的值不会改变,您可以将它们设置为 blob 上的元数据,然后当您直接访问 blob 时,您将获取元数据头作为响应。

    【讨论】:

      【解决方案2】:

      观察

      @Gaurav Mantri answer 是对的。在撰写本文时,您无法将自定义标头添加到从 Azure Blob 存储生成的响应中。


      “一种可能性是让您的用户通过 Web 应用程序请求 Blob,然后当 Web 应用程序发回响应时,您应该能够添加额外的标头。”

      这对我的应用程序来说是不可能的,因为对 azure blob 的请求来自 <img src="https://path.to/container/blob"> 标记。


      "其他选项是使用 blob 元数据。如果这些自定义响应标头的值不会改变,您可以将它们设置为 blob 上的元数据,然后当您直接访问 blob 时,您将获得元数据响应的标头。”

      这是真的,但是,通过修改容器元数据(右键单击容器 >并选择编辑元数据)扩展标头,将生成@形式的自定义响应标头987654331@ - 这不是我想要的。此外,这些标头必须在Resource sharing (CORS) 部分中公开。


      上下文

      让我首先通过解释上下文来解决这个问题。我正在尝试从私有 Azure Blob 存储加载图像。 blob 存储的每个 URI 都包含一个 blob 的唯一性,SAS TokenREAD permission 生成,在有限的时间内允许读取 blob(在我的例子中是图像)。效果很好!

      问题

      我直接使用 img 标签加载 blob/图像。

      <img src="https://myStorage.blob.core.windows.net/myContainer/image.png?SAS_TOKEN">
      

      很遗憾,由于此错误blocked:NotSameOriginAfterDefaultedTOSameOriginByCoep 表示的CORS,资源被浏览器阻止

      修复

      修复很简单,我只需将其中一些标头添加到 Azure Blob 生成的响应中。

      • Origin: mywebsite.com
      • Cross-Origin-Resource-Policy: cross-origin
      • Access-Control-Allow-Origin: https://mywebsite.com

      很遗憾,由于观察部分中指定的原因,无法进行此修复。

      解决方案

      解决方案包括两个步骤:

      1. crossorigin="anonymous" 属性添加到img 标记。
      <img crossorigin="anonymous" src="https://myStorage.blob.core.windows.net/myContainer/image.png?SAS_TOKEN">
      
      1. 在 Azure 存储帐户 资源共享 (CORS) 部分中为 * allowed and exposed headersGET 方法添加 https://mywebsite.comBlob service

      现在来自 blob 的每个响应都将包含 Access-Control-Allow-Origin: mywebsite.com 标头。

      【讨论】:

        猜你喜欢
        • 2019-06-10
        • 1970-01-01
        • 1970-01-01
        • 2018-10-04
        • 2018-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多