I am trying to have my server serving a huge file from another server. However, to protect my credential against that remote server, I can't simply redirect the requester to the file url; on the other hand, although using StreamingHttpResponse
doesn't add content to memory or hardrive, it does takes more time - the server still need to download the file from the remote then serve it, which doubles up the response time. Is there any way I can "redirect" content of the remote file, without actually downloading it? Thanks.
2 に答える
ファイルの読み取りとストリーミングを同時に行うことができます。
Django 1.5のコードを見てください-新しい StreamingHttpResponse を使用しています - あなたがする必要があるのは、他のサーバーから読み取るコードをジェネレーターに入れることだけです。ソケットからデータを読み取るたびに、ストリーミング出力に書き込みます。
Amazon CloudFront を使用している場合、「署名付き URL」と呼ばれる概念によってこの問題を解決します。基本的に、公開鍵暗号化を使用して 1 回限りの URL を生成します。URL のみが使用可能で、特定の IP アドレスのみがコンテンツをダウンロードできる時間範囲を指定できます。他のクラウド プロバイダーにも同様の機能がある場合があります。
CloudFront を使用していなくても、ダウンロード サーバーを制御できる場合は、同様のインフラストラクチャを構築できます。基本的には、秘密鍵を使用して、タイムスタンプ、ダウンロードするファイルの名前、およびダウンロード ポリシー (有効期限と IP 範囲など) を含むメッセージに署名すると、リモート サーバーは公開鍵を使用してメッセージが有効であることを検証します。実際にサーバーから送信され、ポリシーを適用します。
これは、サーバーが最初にファイルをサーバーにダウンロードする必要がないため、リモート サーバーから大きなファイルを安全に提供する最も効率的な方法です。