【问题标题】:Azure blob storage error: Multiple condition headers are not supportedAzure Blob 存储错误:不支持多个条件标头
【发布时间】:2013-10-21 22:27:51
【问题描述】:

对于一个项目,我使用 Azure blob 存储来存储上传的图像文件。我还在网站上显示上传的图像 - 但是,这就是问题所在。对 blobstorage 中图像的所有其他请求都会产生一个400 - Multiple condition headers not supported

阅读此错误后,我最终会看到以下有关指定条件请求标头的文档:http://msdn.microsoft.com/en-us/library/windowsazure/dd179371.aspx

该页面说明了有关指定多个条件标头的以下内容:

如果请求同时指定 If-None-Match 和 If-Modified-Since 标头,则根据 If-None-Match 中指定的条件评估请求。

如果请求同时指定 If-Match 和 If-Unmodified-Since 标头,则根据 If-Match 中指定的条件评估请求。

除了上面列出的两种条件标头组合外,请求只能指定一个条件标头。指定多个条件标头会导致状态代码 400(错误请求)。

我相信 chrome 发送的请求满足本文档中列出的所有要求,但我收到了该错误。

有没有人使用过 Azure blob 存储可以帮助解决这个问题?我将不胜感激!

Chrome 发送的请求:

blob 存储服务返回的 XML 响应:

【问题讨论】:

  • 在您和 Azure 之间是否有一个代理/缓存服务器正在添加它自己的条件标头?当您从不同的网络(即从 Azure 虚拟机)执行相同的测试时会发生什么?
  • 另外,你能告诉我们存储在 blob 存储中的文件有多大吗?
  • 文件最大。 2mb大小,真的只是正常的图片上传。代理/缓存服务器是一个有趣的建议。我从 Azure VM 对其进行了测试,但无法重现错误,因此我假设我所在的共享办公空间必须添加自己的缓存标头。这本身就增加了一点问题,但是,我们正在开发的网站应该由大中型公司的员工使用——这类公司也可能为他们的办公室 WiFi 使用代理/缓存服务器。我们可以做些什么来解决这个问题吗? (缺少通过我们的 webrole 路由请求)
  • 你试过使用 https 吗?

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


【解决方案1】:

是的,这是因为缓存,至少对我来说是因为缓存。我正在使用 SAS,所以我的解决方案是添加一个额外的参数以避免缓存。

/// token = SharedAccessSignature
    string tick = $"&{ DateTimeOffset.UtcNow.Ticks}";
    Uri url = new Uri(file.StorageUri.PrimaryUri.ToString() + token + tick);

Web 应用程序应忽略额外参数。

【讨论】:

    猜你喜欢
    • 2017-09-28
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多