首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向来自azure blob的响应添加自定义响应头?

如何向来自azure blob的响应添加自定义响应头?
EN

Stack Overflow用户
提问于 2021-11-17 09:47:33
回答 2查看 227关注 0票数 0

我正在向我的blob存储区发出卷曲请求。

代码语言:javascript
复制
$ 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上此请求的可用响应头为。

代码语言:javascript
复制
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

我想添加这两个头文件。

代码语言:javascript
复制
Origin: mywebsite.com
Cross-Origin-Resource-Policy: cross-origin

如何添加自定义响应头,以应用于容器中的每个blob?我可以通过portal.azure.com接口来做吗?

EN

回答 2

Stack Overflow用户

发布于 2021-11-17 10:37:28

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

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

另一种选择是使用blob元数据。如果这些自定义响应头的值不会更改,您可以将它们设置为blob上的元数据,然后当您直接访问blob时,您将获得响应中的元数据头。

票数 1
EN

Stack Overflow用户

发布于 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/图像。

代码语言:javascript
复制
<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

遗憾的是,由于Observations部分中指定的原因,此修复是不可能的。

解决方案

该解决方案由两个步骤组成:

  1. crossorigin="anonymous"属性添加到img标记。

代码语言:javascript
复制
<img crossorigin="anonymous" src="https://myStorage.blob.core.windows.net/myContainer/image.png?SAS_TOKEN">

  1. Add 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标头。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70002088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档