我正在使用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会间歇性地工作。
有没有人观察到这个问题,什么可以解决?
答案 0 :(得分:0)
我可以重现您的错误。
这并不意味着SAS令牌已过期。因为如果您测试Azure Blob存储,一切都会好起来的。错误来自我们使用的浏览器。浏览器添加if condition
标头。
如果没有if
标头,则可以正常使用。
这是因为文件存储不支持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 来完成此操作。