我正在向我的blob存储区发出卷曲请求。
$ 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接口来做吗?
发布于 2021-11-17 10:37:28
如果您直接从Azure存储访问blob,则无法将自定义标头添加到响应中。
一种可能是让您的用户通过web应用程序请求blob,然后当web应用程序发送回响应时,您应该能够添加额外的标头。
另一种选择是使用blob元数据。如果这些自定义响应头的值不会更改,您可以将它们设置为blob上的元数据,然后当您直接访问blob时,您将获得响应中的元数据头。
发布于 2021-11-18 09:36:35
观察
@Gaurav Mantri answer是对的。在写这篇文章的时候,你不能向从Azure Blob存储生成的响应添加自定义标头。
“一种可能性是让用户通过web应用程序请求blob,然后当web应用程序发送回响应时,您应该能够添加额外的标头。”
对于我的应用程序来说,这是不可能的,因为对azure blob的请求来自<img src="https://path.to/container/blob">标记。
“另一种选择是使用blob元数据。如果这些自定义响应头的值不会改变,您可以将它们设置为blob上的元数据,然后当您直接访问blob时,您将获得响应中的元数据头。”
然而,这是正确的,通过修改容器元数据来扩展报头(右键单击容器>,然后选择 metadata),将生成x-ms-metadata_key: metadata_value形式的自定义响应报头--这不是我想要的。此外,这些标头必须在Resource sharing (CORS)部分中公开。
上下文
让我首先从这个问题开始,通过解释上下文来说明这个问题。我正在尝试从私有Azure Blob存储加载图像。blob存储的每个URI都包含一个唯一的blob,这是一个用READ permission生成的SAS Token,它允许在有限的时间内读取blob (在我的例子中是图像)。它完美地工作了!
问题
我直接使用img标记加载blob/图像。
<img src="https://myStorage.blob.core.windows.net/myContainer/image.png?SAS_TOKEN">不幸的是,由于此错误blocked:NotSameOriginAfterDefaultedTOSameOriginByCoep所表达的CORS,资源被浏览器阻止


修复
修复很简单,我只需要将这些头中的一些添加到Azure Blob生成的响应中。
Origin: mywebsite.comCross-Origin-Resource-Policy: cross-originAccess-Control-Allow-Origin: https://mywebsite.com遗憾的是,由于Observations部分中指定的原因,此修复是不可能的。
解决方案
该解决方案由两个步骤组成:
crossorigin="anonymous"属性添加到img标记。<img crossorigin="anonymous" src="https://myStorage.blob.core.windows.net/myContainer/image.png?SAS_TOKEN">https://mywebsite.com to Blob service on GET method for * allowed and exposed headers in Storage Account Resource Sharing (CORS)部分中的* allowed and exposed headers的Azure存储帐户资源共享(CORS)部分。

现在,来自blob的每个响应都将具有Access-Control-Allow-Origin: mywebsite.com标头。
https://stackoverflow.com/questions/70002088
复制相似问题