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