我试图让我的服务器从另一台服务器提供一个巨大的文件。但是,为了保护我的凭据不受远程服务器的影响,我不能简单地将请求者重定向到文件 url;另一方面,虽然 usingStreamingHttpResponse
不会将内容添加到内存或硬盘,但它确实需要更多时间 - 服务器仍然需要从远程下载文件然后提供它,这会使响应时间加倍。有什么方法可以“重定向”远程文件的内容,而无需实际下载?谢谢。
问问题
1218 次
2 回答
2
您可以同时读取文件并进行流式传输。
查看Django 1.5 中的代码 - 使用新的 StreamingHttpResponse - 您需要做的就是将从其他服务器读取的代码放入生成器中。每次从套接字读取一些数据时,将其写入流输出。
于 2013-09-15T19:24:50.220 回答
1
如果您使用的是 Amazon CloudFront,他们会通过一个名为“签名 URL”的概念来解决这个问题。基本上,您使用公钥加密来生成一次性 URL;您可以指定 URL 仅可用于的时间范围,并且只有特定的 IP 地址才能下载内容。其他云提供商也可能具有类似的功能。
如果您没有使用 CloudFront,但您可以控制下载服务器,则可以构建类似的基础架构。基本上,您使用您的私钥签署包含时间戳、要下载的文件的名称和下载策略(例如到期日期和 IP 范围)的消息,远程服务器使用您的公钥来验证该消息实际上来自您的服务器,然后执行该策略。
这是从远程服务器安全地提供大文件的最有效方法,因为您的服务器不需要先将文件下载到您的服务器。
于 2013-09-16T04:20:10.863 回答