ダウンロードは Google Cloud Storage でホストされています。しばらくの間、(ユーザーがダウンロード ボタンをクリックすると) オンデマンドで署名付き URL を作成し、ユーザーをその URL にリダイレクトしてきました。
このコードは数か月にわたって運用されていますが、最近、競合状態があることに気付きました。URL がまだ準備されていない場合があります。それまでは、署名付き URL にアクセスしようとすると、403: Forbidden
.
HEAD リクエストを送信して 200 レスポンスを探し、URL の準備ができているかどうかをポーリングすることで、これを軽減しようとしました。これは良い解決策のように思えましたが、時折 3 番目の状態が存在することに気付くまでは、URL は作成されましたが、準備が整っていませんでした。HEAD は200 Success
、次の 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 生成コードを何ヶ月も使用してきました (そして問題なく動作しています)。フォールバック メカニズムが使用されていることに気付いたのは、ここ 2 週間だけです (つまり、URL の準備ができていません)。先月、Google がコードを変更して、URL の準備が整うまでに遅延が発生したようです。これまで、競合状態は明らかではありませんでした。