6

ダウンロードは 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 の準備が整うまでに遅延が発生したようです。これまで、競合状態は明らかではありませんでした。

4

0 に答える 0