为什么通过Python在Azure存储blob中不支持ContentSettings cache_control max-age?

3bygqnnd  于 2022-11-17  发布在  Python
关注(0)|答案(2)|浏览(127)

我 似乎 无法 通过 以下 代码 在 Python 中 激活 Azure 存储 blob 中 的 Cache-Control max-age

contentSettings = ContentSettings(cache_control="max-age=86400")  
 containerClient.upload_blob(blobname, theBytes, length=byteCount, 
        overwrite=True, content_settings=contentSettings)

中 的 每 一 个
在 基于 Web 的 Azure 存储 浏览 器 中 , max-age 似乎 已 正确 设置 :

然而 , 当 blob 下载 时 , max-age 似乎 没有 传播 到 浏览 器 客户 端 。 文件 下载 正确 , 但 从未 缓存 在 客户 端 。 如果 有 必要 , 我 将 使用 axios 来 检索 文件 :

axios.get(url, { responseType: "arraybuffer" })...

格式
下面 是 chrome 开发 者 网络 上 的 文件 视图 , 注意 缺少 max-age

还有 一 个 奇怪 的 地方 :ContentSettings 的 Azure 文档 包含 以下 短语 :* 如果 之前 已经 为 blob 设置 了 cache _ control , 则 会 存储 该 值 。 * 这 到底 意味 着 什么 ?
我 做 错 了 什么 ?

5ssjco0h

5ssjco0h1#

一个可能的原因是CORS设置阻止响应标头暴露给客户端。
请检查存储帐户上Blob服务的Exposed Headers CORS设置,并确保公开所有x-ms-*响应标头。
您也可以尝试通过设置*(即所有响应标头)来设置暴露标头CORS。

iklwldmw

iklwldmw2#

感谢Gaurav的建议。事实证明问题是(通常情况下)我自己的愚蠢。我是通过ASP.net核心控制器/服务获取文件的,而这并没有传播从Azure blob获取的EtagCache-Control值。
奇怪的是,似乎没有一种简单的方法来实现这一点。我找到的所有Azure blob ASP.net核心示例都是手动复制各个blob属性,而不是自动传播它们。

相关问题