【问题标题】:What content cannot be FTP'd safely in binary mode?哪些内容不能以二进制模式安全地通过 FTP 传输?
【发布时间】:2011-01-02 19:31:18
【问题描述】:

FTP主要提供两种传输方式:ASCII和BINARY。

ASCII 模式通常用于基于文本的内容,而 BINARY 模式通常用于按原样传输内容,尽管在 BINARY 模式下传输基于文本的内容通常非常安全。

传输的 CGI 脚本需要 ASCII 模式才能正确执行 - 以 BINARY 模式传输的 CGI 脚本在执行时通常会导致 HTTP 500。

是否还有其他已知需要通过 ASCII 模式传输的内容类型?在 BINARY 模式下传输时哪些内容会“中断”而在 ASCII 模式下传输时不会“中断”?

【问题讨论】:

  • 你确定吗?我预计需要以二进制模式传输 CGI 脚本。另外,我希望二进制更精确,而 ascii 可以有一些优化,可以对行尾等产生影响。
  • “哪些内容不能以二进制模式安全地通过 FTP 传输?”没有内容可以在普通 FTP 中安全传输。使用某种加密! ;-)
  • 是的,我“忘记”了加密。 :-/

标签: ftp


【解决方案1】:

二进制模式适用于任何数据。

CGI 脚本的问题在于它们通常在 Windows 上以 CRLF 行结尾进行编辑,而服务器期望行结尾只是 LF。 ASCII 模式解决了这个问题。但是现代服务器不再关心这个了,如果你有合适的工具,你也可以在服务器端转换行尾,如果你需要的话,你也可以告诉客户端的编辑器使用 LF 作为行尾(至少 Notepad++ 似乎可以做到这一点)。

我从未见过 charset 转换发生在 ASCII 模式下,只是因为 ASCII 一个字符集。

更新:ASCII 模式可用于在连接大型机时在 EBCDIC 和 ASCII 之间转换数据。在这种情况下,二进制模式需要在传输后手动转换。

【讨论】:

  • 如果进行字符集转换,它将以 ASCII 模式进行。二进制模式只假设二进制数据,因此在该模式下不会发生任何转换。但我希望在使用 FTP 传输数据时完全不进行转换。
  • @GolezTrol 我关于字符集转换的观点是,即使在 ASCII 模式下也不应该发生这种情况,因为 ASCII 模式假定 ASCII 字符集(并且服务器无权更改它)。
  • 那我们同意。对不起,我误会了。
【解决方案2】:

我相信创建 ASCII 模式是为了通过调制解调器连接传输更少的数据(它使用 7 位来传输数据)。因此,BINARY 模式可以用于任何内容,甚至可以用于文本,或任何其他可以以 ASCII 模式传输的内容,但它使用的带宽略多:)

此外,随着 UTF 的引入,使用 ASCII 传输文本也不再安全;真的 - 现代的 ftp 客户端只使用 BINARY 模式......

编辑:我对 7 位传输模式的回答不正确。这就是维基百科关于 ascii 与二进制的说法: “ASCII 模式:用于文本。如果需要,数据会在传输前从发送主机的字符表示转换为“8 位 ASCII”,然后(如果需要)再转换为接收主机的字符表示。因此,这模式不适用于包含非纯文本数据的文件。

图像模式(通常称为二进制模式):发送机器逐字节发送每个文件,接收方在接收时存储字节流。建议所有 FTP 实现都支持图像模式。”

请注意最后一句话,实际上建议所有传输都使用二进制模式...

所以底线使用 BINARY 进行所有传输,你会没事的。

希望这会有所帮助, 莫西

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 2018-08-28
    • 1970-01-01
    • 2018-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 2016-07-20
    • 1970-01-01
    相关资源
    最近更新 更多