gpt4 book ai didi

python - Django - 了解 X-Sendfile

转载 作者:IT老高 更新时间:2023-10-28 22:09:26 25 4
gpt4 key购买 nike

我一直在做一些关于使用 Django 进行访问控制的文件下载的研究。我的目标是完全阻止对文件的访问,除非由特定用户访问。我读过在使用 Django 时,X-Sendfile 是实现这一目标的选择方法之一(基于其他 SO 问题等)。我对在 Django 中使用 X-Sendfile 的基本理解是:

  1. 用户请求 URI 以获取 protected 文件
  2. Django 应用根据 URL 决定返回哪个文件,并检查用户权限等
  3. Django 应用返回一个 HTTP 响应,并将“X-Sendfile” header 设置为服务器的文件路径
  4. 网络服务器找到该文件并将其返回给请求者(我假设网络服务器还会一路删除“X-Sendfile” header )

与直接从 Django 中获取文件相比,X-Sendfile 似乎可能是实现 protected 下载的更有效方法(因为我可以依赖 Nginx 来提供文件,而不是 Django),但给我留下了 2 个问题:

  1. 我对 X-Sendfile 的解释至少在抽象上是正确的吗?
  2. 它真的安全吗,假设我不提供正常的前端 HTTP 访问(例如 http://www.example.com/downloads/secret-file.jpg )到存储文件的目录(即,不要将它保存在我的 public_html 目录)?或者,精通技术的用户是否可以检查 header 等并逆向设计访问文件的方法(然后分发)?
  3. 性能上真的差别很大吗。我会通过直接从 Django 提供 150Mb 文件的 8b block 下载来使我的应用程序服务器陷入瘫痪,还是这种非问题?我问的原因是,如果两个版本几乎相等,那么 Django 版本会更可取,因为我能够在 Python 中执行操作,例如记录已完成下载的数量、下载的统计带宽等。

提前致谢。

最佳答案

  1. 是的,就是这样。
  2. 具体实现取决于网络服务器,但对于 nginx,建议将位置标记为内部以防止外部访问。
  3. Nginx 可以异步处理文件,而使用 Django,每个请求需要一个线程,这对于更多数量的并行请求可能会产生问题。

请记住为 nginx 发送 X-Accel-Redirect header 而不是 X-Sendfile。见 http://wiki.nginx.org/XSendfile了解更多信息。

关于python - Django - 了解 X-Sendfile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7296642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com