Azure文件共享访问签名在结束日期之前到期

时间:2019-10-22 01:11:02

标签: azure azure-functions azure-storage

我正在使用Azure 12个月试用帐户,并通过Azure门户在存储帐户上托管一个excel文件。

我生成了一个共享访问签名,其结束日期为从今天开始的三个月,并将生成的SAS令牌粘贴到文件的URL。

我可以使用此过程访问文件。但是,令牌在URL的某些调用后很快过期。在Azure存储帐户上用更新的文件覆盖文件,然后重新生成SAS令牌后,最近发现了该问题。

带有SAS令牌后缀的URL看起来像:

https://xxxxxx.file.core.windows.net/folder_name/yyyyy.xlsx?sv=2019-02-02&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-12-30T16:04:08Z&st=2019-10-22T08:04:08Z&spr=https,http&sig=xxxxx%yyyyy%zzzz

这是我看到的错误:

<Error>
<Code>ConditionHeadersNotSupported</Code>
<Message>
Condition headers are not supported. RequestId:<XXXXX> Time:<YYYYYY>
</Message>
</Error>

错误是随机的,URL会间歇性地工作。

有没有人观察到这个问题,什么可以解决?

2 个答案:

答案 0 :(得分:0)

我可以重现您的错误。

enter image description here

这并不意味着SAS令牌已过期。因为如果您测试Azure Blob存储,一切都会好起来的。错误来自我们使用的浏览器。浏览器添加if condition标头。

enter image description here

如果没有if标头,则可以正常使用。

enter image description here

这是因为文件存储不支持if标头。并且具有if标头的请求将不会被文件存储接受。

这是Offical doc,用于说明文件存储支持哪种标头。

因此,这不是SAS令牌的责任。有关浏览器的故障。如果不是很特殊,建议您使用Azure Blob存储,这不会造成问题。

答案 1 :(得分:0)

您遇到的问题是由于设置了Microsoft Windows-Azure-File / 1.0 Microsoft-HTTPAPI / 2.0。

该服务并不是主要为浏览器设计的,用于访问文件,并且受其支持的头文件的限制。

浏览器通常会在尝试下载新副本之前查看文件的本地缓存副本。他们通过检查本地文件属性,并要求Web服务器使用 If-Modified-Since ,在与缓存相对应的日期之后将已被修改的文件“ IF”提供给Web服务器,标头,就像BowmanZhu所说。

服务器没有忽略标头,而是引发了错误。为了解决这个问题,您需要对页面进行硬重装。在Chrome中,您可以通过按 CTRL + SHIFT + R 来完成此操作。