用于将用户上传的文件发送到远程服务器的传输协议?

Transfer protocol for sending user uploaded files to a remote server?

我习惯于将用户上传的文件处理到同一台服务器,并将我自己的文件传输到远程服务器。但不将用户上传的文件传输到远程服务器。

我正在寻找在这方面选择传输协议的最佳(行业)实践。

我的应用程序是 运行 Django,位于 Linux 服务器上,文件位于 Windows 服务器上。

只要安全(FTPS、SFTP、HTTPS),我选择哪种协议并不重要?或者在 performance/security 方面,一个比另一个更好,特别是在用户上传的文件方面?

请不要link回答解释协议差异的问题,我是在用户上传文件的上下文中专门问的。

只要您选择提供(相互)身份验证、加密和消息身份验证的标准协议,在安全方面就没有太大区别。如果所有这些都是由您选择的协议中的一层 TLS 提供的(就像在您的所有示例中一样),您就不会在设计级别上犯大错误(但实现是关键,许多安全错误是实现的错误,而不是设计缺陷)。不过,此类协议在出于不同目的而支持的算法列表中可能有所不同。

在性能方面可能会有相当大的差异,这取决于您要优化的内容。如果您选择 HTTPS,您将无法长时间保持连接打开,并且很可能必须为每个传输的文件承担整个连接设置的开销,包括身份验证和其他一切。 (好吧,您实际上可以保持 https 连接打开,但对于此类文件上传来说,这将是一个非常自定义的实现。)选择 FTPS/SFTP 您将能够保持连接打开并传输任意数量的文件,但可能必须有更复杂的错误处理逻辑(有时连接终止而底层套接字暂时不知道它等等)。所以简而言之,我认为 HTTPS 会更有弹性,但安全 FTP 对于许多小文件来说性能会更好。

这也是一个架构问题,通过使用 HTTPS,您将能够在您的应用程序代码中实现所有这些,而 FTP 之类的东西将意味着依赖外部组件,这对于操作的观点(想想这将如何实际部署以及是否已经有一个 devops 功能来管理适当的操作)。

最终这只是您必须做出的设计决定,以上只是在不了解所有情况的情况下想到的一些事情,根本不是要考虑的事情的完整列表。