因为《HTTP权威指南》的即将出版,昨天在图灵作译者群中引发了一场针对HTTP译法的大讨论,严格来说,是对其中第二个T(Transfer)的讨论。李锟、陈睿杰、丁雪峰等老师认为现译名“超文本传输协议”是历史上的一次重大翻译错误,带有巨大的误导性,应当修改为“转移”之类的译法。理由是:HTTP属于应用层协议,而非传输层协议,“传输”一词会导致误解;“超文本传输协议”这一译法的始作俑者如果认真研读过HTTP之类的协议,应当就不会犯这一错误。

我过去从来没有研究过HTTP,是个彻头彻尾的外行,在群中讨论时,一边和大家讨论,一边学习。昨天晚上和今天上午查阅了一些资料,整理了一下思路,写在下面,供大家拍砖。

一、毫无疑问:HTTP属于Application layer,而非Transport layer

昨天在讨论时,李锟老师批评一些人比Fielding博士还牛,不承认HTTP不属于传输层。我特意查阅了一些资料,发现大家对于“HTTP属于应用层”是有一致认识的。比如,《HTTP权威指南》的英文原著第11页明确写道:HTTP is an application layer protocol. HTTP doesn't worry about the nitty-gritty details of network communication; instead, it leaves the details of networking to TCP/IP, the popular reliable Internet transport protocol.(该书出版于2002年9月。)清华大学张公忠教授1999年10月在《现代网络技术教程》一书第305页也明确写道:“在网络协议的各个层次中,HTTP处在应用层,HTTP建立在TCP上面……”,而HTTP 1.1应当是在1999年6月发布的。这说明,至少在HTTP 1.1发布之始,国内外学界对于“HTTP属于应用层”都有正确的认识。

二、Transfer与Transport的区别

2.1 普通英语中的区别

从词语的全部内涵来说,我们当然知道Transfer与Transport有很大区别。比如,Transfer有“转会”、“跳槽”、“转让财产”的义项,而Transport有“交通”的义项,过去甚至还有“流放、放逐”的义项。但这些义项显然都与我们这里讨论的HTTP无关。下面是几本字典中对transfer和transport的相关解释:

Cambridge Advanced Learner's Dictionary

transfer verb, to move someone or something from one place, vehicle, person or group to another

transport verb, to take goods or people from one place to another

Longman Dictionary of contemporary English

transfer verb, to move from one place, job, position, etc., to another

transport verb, to carry (goods, people, etc.) from one place to another

RANDOM HOUSE Webster's dictionary of American English

transfer verb, to move, bring, or remove from one place, person, or position to other

transport verb, to carry or convey from one place to another

从以上义项来看,这两个词几乎没有什么区别。

2.2 HTTP 1.1规范中是否严格区分了Transfer和Transport

请注意,这里所说的是这两个英文词,而不是Transport layer与Application layer。以下是HTTP 1.1规范原文中的一些摘录:

  • the data being transferred. (ABSTRACT, P1)
  • a simple protocol for raw data transfer across the Internet(1.1 Purpose, P7)
  • The information transferred as (1.3 Terminology, P9)
  • 15.4 Transfer of Sensitive Information (P141)
  • the transport data units (1.4 Overall Operation, P12)
  • safe transport of binary data (3.6 Transfer Codings,P24)

从上面的不完全摘录可以看出,HTTP 1.1的撰稿者也并没有完全区分这两个词语,至少对于data这一宾语都有使用。

当然,这里说HTTP 1.1中有混用transfer与transport的情况,并不是说这两个词是完全通用的。比如,我们从来没有听谁说过transfer layer。

三、Transport layer译为“传输层”是否100%正确

HTTP的确不属于Transport layer,如果Transport layer译为“传输层”是100%正确的,那Transfer再译为“传输”也就的确无法区分了。可这里的Transport译为“传输”是否100%正确呢?

《现代汉语词典》中对“传输”的解释是“输送(能量、信息等)”,《高级汉语词典》中的解释为“传递,输送(能量、信息等)”。从两本词典在括号中举的例子来看,“传输”的对象是一些比较抽象的东西。通信专业的同学一定都学过“信号”、“消息”与“信息”的区别,那Transport layer传送的是这三者中的哪一个呢?用“传输”是否100%恰当呢?

张公忠教授在我们前面提到的那本教程中,使用“运输层”来称呼这个Transport layer,大家可以品味一下,觉得哪个更恰当呢?当然,我这里并没有想修改“传输层”这一提法的意思。

其实从前面的摘录中可以看出,HTTP 1.1中倒是多次提到了transfer information。

四、“超文本传输协议”是否一定为误译

虽然前面提到,国内外学界应当都知道HTTP是在应用层的,但的确可能会有一些不求甚解的初学者望文生义,认为HTTP属于Transport layer。作为译者也好,出版社也好,都有义务做点解释,避免误解。不过,可能是老师做久了,落下职业病,我脑海里立刻想到,如果我在课堂上讲解这部分内容,会是什么情景。“同学们,提醒大家注意,虽然书上说HTTP的中文意思是‘超文本传输协议’,但你们千万别把它和Transport layer混淆在一起,HTTP是在应用层的。”一定会有学生来问:“那为什么原来译为‘传输’呢?”我能否立即回答“就是第一个译者翻译错了,估计他在翻译这段文字时刚喝了点小酒,然后大家以讹传讹”?我想我不敢这样调侃地回答学生!

首先,一个在上世纪90年代中早期向国内介绍HTTP协议的人,他在翻译这一术语时,没有认真读过协议原文的可能性有多大?!他应当不会完全没看过HTTP的原文就敢把它归到Transport layer去,因为他从其他途径了解HTTP的可能性很小。其次,我认为当时Transport layer的“传输层”译法也并非完全固定下来了,张公忠教授的说法就是一个例子。那原译者从普通英语的角度,把transfer译为“传输”是没错的。如果我的这些猜测正确(我说的是如果),那只能说是因为时过境迁,使不求甚解的学人容易受到误导。在不排除合理可能性之前,我们直接归咎于原译者的随意性是否有欠公平呢?

五、怎么办

5.1 把Transfer译为“转移”是否合适

根据李锟老师所说,HTTP和REST中的transfer是同一个意思。如果用“转移”,那就是“超文本转移协议”和“表述性状态转移”。可是我看到“状态转移”的第一感觉是由状态A转换为转换B的马尔可夫状态转移,而不是将一个状态由一处传到另一处。不知是不是我先入为主了。

5.2 即使“传输”确实错了,要不要改

我认为“超文本传输协议”这个词用了至少15年了,大家都已经是约定俗成了,如果现在突然改成“超文本转移协议”,估计相当一部分人在听到之后得反应一会儿。初中数学的有理数、无理数,那个大家公认译错了,但如果真改为比例数和非比例数,估计也难行得通。高中物理的磁场强度和磁感应强度,虽然不是翻译问题,但也公认不妥,同样,估计也不会再改回来了。

5.3 怎么办

保持原译,加注释。只要特别注明HTTP属于应用层,稍微用心的初学者应当就会注意到各种教科书中的正常解释,不致误会了!

六、参考链接

The Original HTTP as defined in 1991

Basic HTTP as defined in 1992

HTTP 1.1

Roy Thomas Fielding, Architectural Styles and the Design of Network-based Software Architectures