为什么写这篇文章

写这篇文章是因为之前看的这两篇文章 关于HTTP中文翻译的讨论 关于HTTP中文翻译的讨论之二

大多数人可能觉得HTTP翻译成超文本传输协议没有什么问题,直接那么翻译就好了,这个有什么需要讨论的呢?这个问题源于Roy Thomas Fielding 2000年的博士论文在6.5.3这个章节的标题这样写得 6.5.3 HTTP is not a Transport Protocol。 Roy Fielding 说 HTTP定制者之一 而且应该属于负责人。所以他说的话说有足够分量的。而且正确性我觉得说百分百正确。

不过这两个讨论并没有本质解决问题,这里我给出我对问题的理解,然后我一步一步通过我查阅的相关资料来给大家证明为什么可以这么去理解。

我的理解

  1. HyperText Transfer Protocol 翻译成 超文本传输协议 没有 问题
  2. 我也尊重了Roy Thomas Fielding 的观点 "HTTP is not a Transport Protocol "

这里通过一个叫 FTP(File Transfer Protocol) 的协议举个简单例子。FTP的设计目的就是通过网络让两台计算机或者说客户机和服务器之间传输文件。这个协议的主要目的就是对文件的传输,而对文件的控制的说各自的计算机本身。而网络就是解决计算机与计算机之间数据传输的。所以File Transfer Protocol叫文件传输协议没有什么问题。而HTTP的设计也是用来传输特定内容的数据的。 鉴于讨论里面说的REST中也使用了Transfer ,讨论者用这个Transfer来解释HTTP 中的Transfer 这里我先不做解释。首先FTP协议在很早之前就出现了而HTTP说在FTP之后出现的,而且HTTP解决了FTP的一些问题。所以这里的HTTP中的Transfer 可以说跟FTP中的Transfer 是一个意思。 而REST中的Transfer 是不是这个意思,却没有那么明确的表述。所以我觉得Transfer不应该用REST中的Transfer去解释。后面我会根据我查阅的资料尽量把每个问题点都面面俱到的解释到位来证明我的理解说一个可行的方案,也是一个更适合的方案。

备注(在操作系统里File 跟m.lom599理解的文件可能还有一点区别,但是这个不影响举个例子)

一、Transfer与Transport 英文翻译问题

Transfer与Transport 这两个单词的意思大家可以自己找翻译,由于网上给的翻译不能明确今天的问题这里不纠结这个。

先看这两句话,这两个是讨论内容第二篇的话 李锟 09:57:33 IETF的那些“transfer protocol”协议,都不是传输协议 李锟 09:58:11 “transport protocol”和“transfer protocol”两个术语,一定要仔细分清楚。
其实问题的关键点之一就是这两个单词翻译成中文,很多人都翻译成了 传输。 而在计算机网络这个特定的领域里面确实说两个术语,代表的东西可以说是有严格区分的 那么问题来了,如果都翻译成传输协议那么这两个中文就变成完全一样的东西了,所以确实如反方的观点,会给人误导。所以这样说绝对不可取的,鉴于不要误导他人的原则,我的观点就是有问题就应该改正,也不要因为难而不去改。 现在通过一个简单的例子来表达中英语言之间的差异。 中文一只狗,一只猫,一匹马。 英文A dog, a cat, a horse m.lom599会说 一匹 和一只说有区别的,但是英文都翻译成 a 。有点类似刚刚m.lom599翻译成传输的感觉,所以从语言 层面确实可能会出现翻译困难的问题。虽然这个例子并没有表达出本文想说的问题,但是确实从语言层面中英文确实有很大的差异,所以遇到这些差异我觉得我不能因为要区分差异就说我都翻译成传输就是错。从这个层面讲我对正反两个反面都不赞同。而在这个位置我觉得两个单词确定都有传输的意思。下面我会从我查阅的英文原版资料来给大家一个我的理解

二、Transport layer “运输层”或者“传输层”

计算机网络是分层结构的,Transport layer是其中的一层 计算机网络是分层结构的,我大学的教材是谢希仁版本的计算机网络 对Transport layer的翻译是“运输层” 讨论里有人写得文章里说的张公忠教授的教程中,使用“运输层”来称呼这个Transport layer 而还有非常多的人对Transport layer的翻译说“传输层”
如果从汉语的角度去说传输和运输差异确实也是挺大的。所以,Transport 翻译成传输也是可以商榷的。 这里不纠结翻译成哪个更适合,只是举个例子来支持我后面的论断

三、Transfer 翻译成传输真的错了么

先说如果Transfer 翻译成传输错了,那么翻译成什么说对的,讨论里说翻译成转移这个说因为REST 的T 翻译成转移更适合,而REST就是Fielding 博士在主持编写HTTP协议时候总结出来的一个词。而讨论里认为这个T翻译成转移更适合。这几天为了搞清楚这个问题我也试着用转换 转移 或者别的更适合的词语间常事。 这里我先说两个点。 1. Transfer确实说在REST之前就一直在用了,而且我暂时不觉得这个T和那个T代表的说一个意思,如果你又合理的充分推理发给我,我可以道歉。但是如果没有就不能拿他当做证据。 2. 在汉语里,你翻译成,转移和传输,我没有没有觉得有什么本质的改变,群里也对这个有讨论。所以这个结论就是如果你说不能翻译成传输,你改成转移也完全没有什么意义,唯一的意义就是区分Transfer和Transport。如果只是区分这个后面我会给一个更完美的方案。

这里我先说一个很重要的观点,就是大家在讨论Transfer的时候觉得Transfer翻译成传输就是错的,而至于要不要改说个问题,而接下来我先去解释下这个问题。 Transfer如果不翻译成传输翻译成什么更适合? 备注:RFC2616 文档的内容为 Hypertext Transfer Protocol -- HTTP/1.1 至于什么说RFC文档如果不知道自己简单先了解下。 这里应用RFC2616文档1.1的内容,1.1章节的标题为Purpose(翻译为目的或者意图如果有错请指正谢谢) The first version of HTTP, referred to as HTTP/0.9, was a simple protocol for raw data transfer across the Internet. 这里的 raw data transfer across the Internet.这句话我的理解数据在因特网上传输或者转移都合适。但是m.lom599习惯应该是传输更符合m.lom599的说话习惯。所以这句话我觉得transfer翻译成传输更适合。 Transfer在协议里很多地方使用比如 RFC2068 14.40 Transfer-Encoding RFC2616 14.41 Transfer-Encoding RFC2616 3.6 Transfer Codings 在RFC2616 3.6 Transfer Codings 有这样一段话 However, safe transport has a different focus for an 8bit-clean transfer protocol. In HTTP, the only unsafe characteristic of message-bodies is the difficulty in determining the exact body length (section 7.2.2), or the desire to encrypt data over a shared transport. 这里使用了一个词transport这个 还有 transfer protocol 我不是做翻译的这里列出来这个说为了大家理解。

下面我要给大家一个非常重要的文档,RFC: 793 通过这个文档我觉得更能体现出来Transfer 的含义 RFC: 793 先简单介绍下主要介绍的说TCP协议 TRANSMISSION CONTROL PROTOCOL RFC: 793 的 1.5节 列出来几个词语,然后对这些词语后面有详细的解释 1. Basic Data Transfer 2. Reliability 3. Flow Control 4. Multiplexing 5. Connections 6. Precedence and Security 我想大家看到第一个词Basic Data Transfer 在这里翻译成 基础的数据传输应该说更恰当了,也没有什么异议。 在查阅文档的过程中,我发现在对Transfer 解释的时候,文档里确实有一部分表达了交换的意思,所以之前我也考虑过如果Transfer 翻译成传输真的错了那么翻译成交换或者交互或者其他的是不是更适合。不过这里不纠结这些了。

四、"HTTP is not a Transport Protocol "

李锟 09:57:33 IETF的那些“transfer protocol”协议,都不是传输协议 李锟 09:58:11 “transport protocol”和“transfer protocol”两个术语,一定要仔细分清楚。
这两句话不是我说的。说那个讨论帖里的内容我拿出来的 首先 我觉得在英语国家使用“transport protocol”和“transfer protocol” 应该没有那么多歧义,不然这个查下资料可能就找到问题了,可是为什么m.lom599翻译之后会有这个歧义了呢? 为了解决这个问题 我有必要先赞同 李老师的一个观点“transport protocol”和“transfer protocol”两个术语,一定要仔细分清楚。
确实这说两个术语不等价,所以不能互换使用,所以就不能同时翻译成一个单词。 这里还要否定李老师的上面一句话“transfer protocol”协议,都不是传输协议。 这里有人想过一个方案就是把Transport layer 不要翻译成传输层,翻译成运输层,这样是不是就解决了? 好像说个解决办法,但是这样就会有一个问题没有解决就是没有消灭歧义。相对于transfer 来说transport 更像是传输,如果翻译成运输层,transport 给人的感觉更像说传输反而有引入新的歧义的感觉。 那应该如何解决这个问题呢 这里引用几个文章片段来感受一下好解决这个问题 这个是英文维基百科的Transport layer里的一句话 The best-known transport protocol of TCP/IP is the Transmission Control Protocol (TCP) 这句话说 TCP 是一个 transport protocol 。

RFC959 2.2 这个说FTP协议中的一句话
There are two byte sizes of interest in FTP: the logical byte size of the file, and the transfer byte size used for the transmission of the data. The transfer byte size is always 8 bits. The transfer byte size is not necessarily the byte size in which data is to be stored in a system, nor the logical byte size for interpretation of the structure of the data. 大家应该看到and the transfer byte size used for the transmission of the data. 这半句了 transmission 和TCP协议中的T说一个单词。不过我不考虑单词的用法,因为我英文肯定说没有讨论区的专家好的。 rfc7230#section-6 有这样一段表述 HTTP messaging is independent of the underlying transport- or -session-layer connection protocol(s). HTTP only presumes a reliable transport with in-order delivery of requests and the corresponding in-order delivery of responses. The mapping of HTTP request and response structures onto the data units of an underlying transport protocol is outside the scope of this specification. 其中使用了underlying transport- or -session-layer connection protocol(s) 还有underlying transport protocol 。代表的是低层的 transport protocol 。 而维基百科 Application layer (应用层)还有这样一句话 HTTP 属于应用层协议 The application layer only standardizes communication and depends upon the underlying transport layer protocols to establish host-to-host data transfer channels and manage the data exchange in a client-server or peer-to-peer networking model. 通过上面的解释基本可以确定 几个问题 transport layer protocols 和 Transport Protocol 应该代表的说一个意思就是传输层协议。姑且翻译成传输层。 如果这句话成立那么"HTTP is not a Transport Protocol " 就非常好理解了。HTTP 确实不是一个传输层协议。 而这句话没有意义之后 transfer 翻译成传输也没有问题。

五、 Transport Protocol 真的说的是传输层么

"HTTP is not a Transport Protocol " 中的 Transport Protocol 真的说的是传输层么 6.5.3 "HTTP is not a Transport Protocol " 的第一段文字 HTTP is not designed to be a transport protocol. It is a transfer protocol in which the messages reflect the semantics of the Web architecture by performing actions on resources through the transfer and manipulation of representations of those resources. It is possible to achieve a wide range of functionality using this very simple interface, but following the interface is required in order for HTTP semantics to remain visible to intermediaries.

通过Fielding 博士这段文字表述,如果作者想表达的是Transfer 不应该翻译成传输。是不是应该用一个更直白的方式把去表达这段文字呢?如果大家仍然觉得6.5.3的具体内容表达的就是HTTP 不是传输协议,那么请告知如何解读的,我也想试着去理解一下,但是如果没有明确的表达。那么这里概不接受。所以我的理解也非常简单,HTTP is not a Transport Protocol 这句话的意思就是HTTP不是一个传输层协议。而且Transport Protocol这个术语确实在很多地方已经使用了,比如TCP上面就有这个词,所以这个词表达的说传输层协议的意思,我觉得非常符合他的本意。

还有一个证明点就是 6.5.2 的标题是HTTP is not RPC 这里RPC 是一个术语。这句就不会有什么混淆 而6.5.3 标题 HTTP is not a Transport Protocol 这里Transport Protocol 应该跟RPC一样说个术语。这个术语表达的意思应该说传输层协议更适合。而不是想表达传输的意思。如果我理解误欢迎大家指出。如果觉得 有道理还是希望大家多多支持一下

六、 总结

通过上面的分析之后我总结为HTTP翻译成超文本传输协议没有问题。 "HTTP is not a Transport Protocol " 中的Transport Protocol代表的应该是一个术语。 我的理解Transport Protocol在这里表达的就是传输层协议。 Transport Protocol 就是 transport layer protocol 的简称,或者标准表述。

七、参考链接

Roy Thomas Fielding, Architectural Styles and the Design of Network-based Software Architectures rfc2616 HTTP协议 rfc793 TCP 协议 rfc959 FTP协议 维基百科 应用层协议 维基百科 [TCP协议]