FTP主要提供两种传输模式:ASCII和BINARY。
ASCII模式通常用于基于文本的内容,而BINARY模式通常用于按原样传输内容,尽管在BINARY模式下传输基于文本的内容通常非常安全。
传输的CGI脚本需要ASCII模式才能正确执行 - 在BINARY模式下传输的CGI脚本通常会在执行时产生HTTP 500.
是否还有其他类型的内容需要通过ASCII模式传输?在BINARY模式下传输时,哪些内容将“中断”,在ASCII模式下传输时不会“中断”?
答案 0 :(得分:12)
二进制模式适用于任何数据。
CGI脚本的问题在于它们通常在Windows上使用CRLF行结尾进行编辑,服务器期望行结尾只是LF。 ASCII模式解决了这个问题。但现代服务器不再关心这一点了,如果你有合适的工具,你也可以在服务器端转换行结尾,而且你可以告诉客户端的编辑器使用LF作为行结束如果你需要(至少Notepad ++似乎这样做)。
我从未在ASCII模式下看到 charset 转换,因为ASCII 是一个字符集。
更新:ASCII模式可用于在连接到大型机时在EBCDIC和ASCII之间转换数据。在这种情况下,二进制模式在传输后需要手动转换。
答案 1 :(得分:0)
我认为创建ASCII模式是为了通过调制解调器连接传输更少的数据(它使用7位传输数据)。所以BINARY模式甚至可以用于任何文本或任何其他可以在ASCII模式下传输的内容,但它使用的带宽略高:)
另外,随着UTF的引入,用ASCII传输文本真的不安全;真的 - 现代ftp客户端只使用BINARY模式...
编辑:我对7比特传输模式的回答不正确。这就是维基百科关于ascii vs binary的内容: “ASCII模式:用于文本。如果需要,数据在发送之前从发送主机的字符表示转换为”8位ASCII“,并且(如果需要,再次)转换为接收主机的字符表示。结果,这模式不适用于包含纯文本以外的数据的文件。图像模式(通常称为二进制模式):发送机器发送每个文件字节为字节,接收方在收到字节流时存储。建议对所有FTP实施使用映像模式支持。“
请注意最后一句话,表示建议所有传输实际使用二进制模式...
SO底线使用BINARY进行所有转账,你会没事的。
希望这有帮助, Moszi