28

Amazon S3 でファイルをホストしており、署名付き URLを使用してアクセスできるようにしたいと考えています。

単純な GET リクエストの場合、これは完全に機能します。ただし、(ファイル サイズを取得するために) 最初に HEAD 要求を実行するクライアントもあります。URL の署名に http 動詞 (GET と HEAD) が含まれているため、head 要求は失敗します。

クライアントは単純に次のことを行います。

HEAD http://(bucketname).s3.amazonaws.com/filename?AWSAccessKeyId=(mykey)&Expires=(timestamp)&Signature=(sig)
GET http://(bucketname).s3.amazonaws.com/filename?AWSAccessKeyId=(mykey)&Expires=(timestamp)&Signature=(sig)

head と get に別の URL を使用するようにクライアントを変更することはできません。同じリソースに対して HEAD と GET の両方を受け入れる署名を amazon に使用させる方法はありますか?

4

3 に答える 3

17

先頭バイトのみヘッダーを指定すると、HEAD動作をシミュレートすることもできます。違いは、コードの代わりに受け取ることです。次に、ヘッダーにフル サイズが表示されます。GETRange206200Content-Range

curl -r 0-0 <URL>

于 2016-09-23T14:22:23.070 に答える
6

友人の助けを借りて、自分に合った解決策を見つけました。サーバーで HEAD リクエストをプロキシし、GET リクエストをリダイレクトします。

ファイル情報を取得するための HEAD 動詞を含むリクエストが届いた場合、サーバーで S3 コードを使用して HEAD 情報を取得し、それを自分でリクエスタに送り返しました。

ファイル自体を取得するための GET 動詞を含む要求が届いた場合は、事前に署名された URL を使用して 302 リダイレクトを行います。

これは、両方に事前署名する必要がないため、HEAD と GET の両方を処理するのに完全に機能します。実際のファイルの GET リクエストに事前署名するだけです。

于 2014-01-12T21:31:11.563 に答える
6

いいえ。署名入力に微妙な違いがあるため、HEADと には異なる署名が必要です。GET

事前に署名された認証 URL を生成するために何を使用しているかはわかりませんが、公式の AWS SDK の中にはこれを処理するものもあれば、まだ処理していないものもあることはわかっています。

于 2013-03-30T21:26:53.150 に答える