Google cloud storage 通过签名url确定bucket对象的可用性

Google cloud storage 通过签名url确定bucket对象的可用性,google-cloud-storage,pre-signed-url,Google Cloud Storage,Pre Signed Url,我们的下载托管在谷歌云存储上。一段时间以来,我们一直在按需创建一个已签名的url(当用户单击下载按钮时),然后将用户重定向到该url 这段代码已经生产了几个月,但最近我们注意到有一个竞争条件:有时URL还没有准备好。在此之前,尝试访问已签名的URL会导致403:禁止 我们试图通过发送HEAD请求来轮询URL是否已准备就绪,寻找200响应来缓解这种情况。这似乎是一个很好的解决方案,直到我们意识到偶尔会出现第三种状态:URL已经创建,但还没有完全准备好。我们的负责人收到了一个200成功响应,其中包含

我们的下载托管在谷歌云存储上。一段时间以来,我们一直在按需创建一个已签名的url(当用户单击下载按钮时),然后将用户重定向到该url

这段代码已经生产了几个月,但最近我们注意到有一个竞争条件:有时URL还没有准备好。在此之前,尝试访问已签名的URL会导致
403:禁止

我们试图通过发送HEAD请求来轮询URL是否已准备就绪,寻找200响应来缓解这种情况。这似乎是一个很好的解决方案,直到我们意识到偶尔会出现第三种状态:URL已经创建,但还没有完全准备好。我们的负责人收到了一个
200成功
响应,其中包含以下XML文档:

<Error>
     <Code>SignatureDoesNotMatch</Code>
     <Message>
          The request signature we calculated does not match the signature
          you provided. Check your Google secret key and signing method.
     </Message>
     <StringToSign>
          GET 1469137341 /our-bucket-name/path/to/file.exe?
             response-content-disposition%3dattachment%3b+filename%3dfile.exe
     </StringToSign>
</Error>
URL将在几秒钟后可用。不要讨论它没有立即准备好的可能性

我的问题:您应该如何确定新创建的签名URL何时可以使用?

编辑


事实上,我们已经使用URL生成代码几个月了(它工作得很好)。直到最近两周,我们才注意到我们的回退机制被使用(也就是URL还没有准备好)。这几乎就像谷歌在上个月更改了代码,在URL准备就绪时引入了延迟。到目前为止,竞争条件还不明显。

我建议将此发布到,以便我们可以在需要时提交一个bug。这似乎与当前记录的行为不符。@Adam我找不到任何关于URL何时可用的文档。调用方是否应该有效地期望请求是同步的,并且当调用返回时,URL是否存在?您能指出任何讨论可用性的文档吗?顺便说一句,谢谢你看这个。你描述的行为是没有记录的,所以这可能是一个需要调查的问题。预期的行为是,URL应该在调用返回后立即可用。