通过 SAS 访问 Azure blob 存储时偶尔出现 403 禁止

Sporadic 403 forbidden when accessing Azure blob storage through SAS

所以我们正在构建一个基于网络的音频流平台,其中音频文件存储在 blob 存储中。我们正在为 blob 创建一个 SAS URL,然后将其提供给 javascript 播放器 (aurora)。

这在大多数情况下工作正常,但是当我经常切换曲目时,在某个时刻我开始收到对文件 HEAD 请求的 403 响应。

如果我在 firebug 中单击 RESEND,它只是重新发送完全相同的请求,那么有时我仍然会收到相同的 403 错误,但一段时间后请求会再次成功,这意味着 URL格式正确。

以下是我收到的完整回复

403 Server failed to authenticate the request. Make sure the value of
Authorization header is formed correctly including the signature.
Transfer-Encoding:  chunked Server:  Microsoft-HTTPAPI/2.0
x-ms-request-id:  <removed>
access-control-expose-headers: 
Content-Type,Accept-Ranges,Content-Encoding,Content-Length,Content-Range
Access-Control-Allow-Origin:  * Date:  Fri, 12 Aug 2016 06:31:58 GMT

我开始认为触发了对 blob 存储的某种限制,例如最大连接数或带宽限制,甚至可能是 DOS 防御机制。 有人有什么建议吗?

我读过一些关于存储诊断的文章,但它们都提到了旧的 Azure 门户。我的存储帐户仅在新门户中可见。 所以我的子问题是:任何人都可以指导我使用新的 Azure 门户诊断请求被拒绝的原因吗?

编辑: 我使用 Azure Management Studio 查看了存储帐户的日志。我在那里找到了这个日志行,它指定了一个 'SASNetworkError':

1.0;2016-08-12T10:26:27.7337647Z;GetBlob;SASNetworkError;206;19002;6;sas;;[xxx];blob;"https://[xxx].blob.core.windows.net:443/files/[xxx].flac?sv=2015-04-05&amp;sr=b&amp;si=flacpolicy636065943797947863&amp;sig=XXXXX&amp;sip=[xxx]";"/[xxx]/files/[xxx].flac";8f7d48a3-0001-0017-5983-f499a7000000;0;[xxx]:40690;2015-04-05;637;0;499;0;0;;;"&quot;0x8D35C8CDDD72689&quot;";Monday, 04-Apr-16 13:27:27 GMT;;"Mozilla/5.0 (Windows NT 10.0; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0";"http://[xxx].azurewebsites.net/";

看起来这是错误的原因,但我无法弄清楚失败的原因。

据此article

SAS request that failed due to network errors. Most commonly occurs when a client prematurely closes a connection before timeout expiration.

是否有网络中介(如代理)正在关闭连接?

我发现了导致错误的原因:一个容器上最多有 5 个命名访问策略。我正在为每个游戏创建一个新的访问策略并以新名称注册。 我通过创建新策略并将其传递给 GetSharedAccessSignature 调用解决了这个问题。