Azure文件存储错误:不支持条件标头

时间:2017-04-30 12:54:56

标签: azure-storage

尝试直接从Azure文件存储将PDF文件下载到浏览器时出现此错误:

<Error>
    <Code>ConditionHeadersNotSupported</Code>
        <Message>
            Condition headers are not supported. RequestId:a84ee68e-   001a-001b-4223-bff5e7000000 Time:2017-04-27T06:57:22.2002199Z
        </Message>
</Error>

边缘:空白页面或带有冻结加载指示器的空白页。

FireFox:第二次,显示下载文件的对话框。

Chrome:空白页或当PDF文档“在默认PDF查看器应用程序中打开PDF文件”设置时,显示下载文件的对话框。

IE:显示下载文件的对话框。

Safari:显示PDF。

这种行为可以在这里看到:
    https://peachstatepca.file.core.windows.net/content/newsletters/PresseApril2017.pdf?sv=2016-05-31&sr=f&sig=rkQEmY6IWXZqcgvhmm00gLQ%2FCZEq6nsH95S3aP9T72A%3D&se=2017-05-01T11:46:18Z&sp=r

6 个答案:

答案 0 :(得分:3)

Azure文件存储存在错误或任何问题,这是因为某些代理/缓存服务器。您可以使用以下解决方案。

system

答案 1 :(得分:1)

  

Azure文件存储错误:不支持条件标头

由于新的Edge浏览器不支持ActiveX插件。因此,Acrobat / Reader插件不适用于Edge。我们可以获取Change in support for Acrobat and Reader plug-ins in modern web browsersMicrosoft Edge: Building a safer browser

的更多详细信息

修改

如果我们尝试在私有和开发模式下使用Edge下载PDF文件,我们可以收到错误消息“某些东西使这个PDF保持打开”并且还可以知道边缘浏览器已发送2个要求。第二次请求标题为“If-range”。根据Azure文件存储Get File API,没有指定支持的条件标头If-Range。我还找到了一个关于边缘浏览器的类似issue

enter image description here

我也在Firefox和Chrome中测试,然后只获得1个请求。

enter image description here

注意:对于Azure Blob服务,可以从边缘浏览器正确打开pdf文件。由于支持成功操作以读取完整blob的Blob Get Blob API返回状态代码200(OK)和 读取指定范围的成功操作将返回状态代码206(部分内容)。

答案 2 :(得分:1)

我认为你需要为你的共享设置CORS规则

https://docs.microsoft.com/en-us/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services

或者您可能上传了一个空文件。

答案 3 :(得分:1)

我们还面临着这个问题和最简单的方法,直到Azure File Team实施Azure Feedback forum中给出的建议之前,一种解决方法是在URL末尾附加额外的参数。 因此,对于上述网址- https://peachstatepca.file.core.windows.net/content/newsletters/PresseApril2017.pdf?sv=2016-05-31&sr=f&sig=rkQEmY6IWXZqcgvhmm00gLQ%2FCZEq6nsH95S3aP9T72A%3D&se=2017-05-01T11:46:18Z&sp=r &xyz =客户端的时间戳

这将确保浏览器不会缓存,因此不会添加条件标头

答案 4 :(得分:1)

如果您使用的是C#和Nuget软件包,则可以通过编程方式执行此操作

var sas = fileRef.GetSharedAccessSignature(new SharedAccessFilePolicy()
{
    Permissions = SharedAccessFilePermissions.Read,
    SharedAccessExpiryTime = new DateTimeOffset(DateTime.UtcNow.AddHours(1))
},
new SharedAccessFileHeaders()
{
    CacheControl = "no-cache, no-store, must-revalidate"
});

答案 5 :(得分:0)

Azure文件存储当前不支持条件标题。

workaround将使用CacheControl属性并将其设置为no-cache, no-store, must-revalidate

  • 您可以在上传期间通过设置属性对新文件执行此操作 文件。
  • 对于现有文件,可以通过Powershell脚本或使用Storage Explorer一对一地对其进行更新。您需要清除浏览器缓存以删除现有的缓存标头信息。

Using Storage Explorer to set CacheControl property