最近在看《HTTP图解》这本书,书中提到了对国内对HTTP协议名称的翻译问题,并且给出了一些网友讨论的原稿链接,我看了一下觉得挺有意思的,另外我本人也觉得翻译对于理解协议本身非常重要,就整理了一些观点。

  HTTP的全称是HyperText Transfer Protocol,大家主要的关注点在于Transfer应该如何翻译。

  以下是整理的内容:

  李锟:

  1.纸面释义

  在IETF的RFC中,“transport”(传输)的含义是指:从端到端(例如从ip1:port1到ip2:port2)可靠地搬运比特,也就是TCP/IP协议栈中的第3层传输层(transport layer)协议所做的那些事情。

  而“transfer”的含义是:通过在客户端-服务器端之间转移一些带有操作语义的操作原语,来执行某种操作。“transfer”是TCP/IP协议栈中的第4层应用层的概念,而不是第3层传输层的概念。“transfer”所转移的是带有明确操作语义的操作原语,而不是没有操作语义的比特流。

  2.HTTP协议在TCP/IP协议族中的位置

  HTTP其实是一种应用协议。HTTP/FTP/NNTP..... 全是应用层协议。transfer是应用层的概念。传输这件事情,TCP+UDP已经干的很好了。

  不过本着人有多大胆地有多大产的革命乐观冒险主义,非把HTTP当作传输协议来用,确实也死不了人。但是这是低效的用法,会付出一些代价。

  3.HTTP设计者Fielding博士的释疑

  HTTP定制者之一的Roy Fielding博士在其论文[1](6.5.3节)中使用“transfer”表达的是“(表述状态的)转移”(Representational State Transfer),而不是“传输”。这是因为英语单词“transfer”在不同语境下的多义性,请勿误解。

 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.

  尝试翻译一下: 

  HTTP不是为了设计成一个传输协议。它是一个转移协议,通过对资源表征的转移和操作,它反映了Web架构的含义。它使得通过简单的接口实现非常大范围的功能诉求,同时接口又是必须的,它使得HTTP的语义对于中间媒介保持可见。

  4.HTTP协议的有设计与发展

  HTTP协议为何要这样设计、设计出来是为了做什么事情,指导思想是REST。REST其实就是中庸之道,没什么神秘。

  HTTP 1.0和HTTP 1.1最大的区别是什么,我接下来详细解释。

  HTTP 1.0基本上就是一个服务器端静态文件的操作协议,并没有抽象的资源概念,HTTP 1.0认为Web服务器上就是一大堆静态文件。HTTP 1.0里面的transfer,就是传递、转移文件。有人把它理解为传输,似乎也可以。但是在协议里面,传输transport其实指的是搬运bit层次的苦力活。

  如何来很好地支持动态内容,是HTTP 1.1协议要解决的一个主要问题。因此就发明了一个新的概念叫做资源,注意:资源和面向对象编程里面的对象类似,是一个抽象的工具。资源不仅仅可以代表服务器端一个文件、数据库中一条记录这类具体的东西。可以要多抽象有多抽象。有了资源之后,还需要设计一个统一的接口来操作资源。否则每一个资源操作的方式都不一样,那样做会严重降低Web应用的可伸缩性。

  陈睿杰-小狗

  其实说起来,http还真和邮局很相似,你去寄信,信封上的东西,比如地址、邮编,是有语义的,你可以看作是“应用层”的东西,你通过信件“转移”你的想法给对方;邮局的派送车,只管帮你运输的,那个是“传输层”的东西,帮你“传输”这封信件。
  对应到HTTP协议的内容,request header、response header,就是信封上的元信息,body是你的信件内容。http很依赖这些元信息的,它根本不关注整个东西是怎么送达到对方手里的,传输有TCP、IP在做了。

  其实要真正明白区别,就要明白资源的概念,资源是抽象的概念,你不可能在网络上真正的交换一个资源实体,你只能操作表述,资源永远无法直接触及,在REST架构中,服务器和客户端之间都只能通过资源的表述来进行交流,而非资源本身,这就是为什么要用“转移”来称呼这个操作。转移表述,而非传输资源。

  

  参考文档:

  http://www.ituring.com.cn/article/1817#

  http://www.ituring.com.cn/article/937

  http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation.htm

一个有趣的问题——HTTP是“超文本传输协议”还是“超文本转移协议”的更多相关文章

  1. HTTPS----安全超文本传输协议

    HTTPS协议详解HTTPS以保密为目标研发,简单讲是HTTP的安全版.其安全基础是SSL协议,因此加密的详细内容请看SSL.全称Hypertext Transfer Protocol over Se ...

  2. HTTP超文本传输协议-HTTP/1.1中文版

    摘要 超文本传输协议(HTTP)是一种为分布式,合作式,多媒体信息系统服务,面向应用层的协议.它是一种通用的,不分状态(stateless)的协议,除了诸如名称服务和分布对象管理系统之类的超文本用途外 ...

  3. http 超文本传输协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...

  4. 超文本传输协议-HTTP/1.1

    超文本传输协议-HTTP/1.1(修订版) ---译者:孙超进本协议不限流传发布.版权声明Copyright (C) The Internet Society (1999). All Rights R ...

  5. HTTP协议(超文本传输协议)

    一.HTTP的简介: 超文本传输协议. 它是基于TCP连接的(默认端口号是80).所以在传输数据前客户端需向服务器发送连接请求.当服务器同意连接请求,建立连接后才可以发送数据报文. 二.HTTP的报文 ...

  6. 安全超文本传输协议(HTTPS)详解

    一.概念与摘要 HTTPS (Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息.它使 ...

  7. Hyper Text Transfer Protocol(超文本传输协议)

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  8. 【RL-TCPnet网络教程】第41章 HTTP超文本传输协议基础知识

    第41章      HTTP超文本传输协议基础知识 本章节为大家讲解HTTP(HyperText Transfer Protocol,超文本传输协议),从本章节开始,正式进入嵌入式Web的设计和学习. ...

  9. 第9章 应用层(4)_超文本传输协议HTTP

    5. 超文本传输协议HTTP 5.1 统一资源定位符URL (1)URL的一般形式:<协议>://<主机>:<端口>/<路径> ①协议后面必须写上“:/ ...

随机推荐

  1. 在Apex中使用sObject

    sObject对象的定义 Salesforce中的标准对象或自定义对象在Apex中使用时被称作"sObject".sObject对象的一个实例相当于Salesforce中的一条记录 ...

  2. Linux profile1,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part1

    profile,bashrc,.bash_profile,.bash_login,.profile,.bashrc,.bash_logout浅析 Part 1   by:授客 QQ:103355312 ...

  3. 【Java入门提高篇】Day29 Java容器类详解(十一)LinkedHashSet详解

    当当当当当当当,本来打算出去浪来着,想想还是把这个先一起写完吧,毕竟这篇的主角跟我一样是一个超级偷懒的角色——LinkedHashSet,有多偷懒?看完你就知道了. 本篇将从以下几个方面对Linked ...

  4. (网页)js每隔5分钟执行一次ajax请求的实现方法(转)

    转自脚本之家: 一个页面好像只能有一个 window.onload=function(){},所以要有多个事件,这样写就好了 window.onload=function(){ //假设这里每个五分钟 ...

  5. 慕学在线网0.4_xadmin后台管理

    admin是基于Django开发的后台管理框架,方便,快捷,而且简单: 而xadmin就相当于admin的升级版,更加强大. 1.安装xadmin(源码安装方式) 教程 PS: - 卸载pip安装的x ...

  6. java 按字节读写二进制文件(Base64编码解码)

    最近在做项目时遇到这样一个需求:依次读取本地文件夹里所有文件的内容,转为JSON,发送到ActiveMQ的消息队列, 然后从MQ的消息队列上获取文件的信息,依次写到本地.常见的文件类型,比如.txt ...

  7. MySQL--eq_range_index_dive_limit参数学习,MYSQL 5.6 5.7处理数据分布不均的问题

    官方文档如下描述:This variable indicates the number of equality ranges in an equality comparison condition w ...

  8. C#检测本机是否联网

    public class Net { [DllImport("wininet")] private extern static bool InternetGetConnectedS ...

  9. BOM 清除

    [root@test3 11]# gcc 11.2.c11.2.c:1: 错误:程序中有游离的 ‘\357’ 8进制,相当于16进制 ef11.2.c:1: 错误:程序中有游离的 ‘\273’11.2 ...

  10. UITableViewCell 获取当前位置

    CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath]; CGRect rectInSuperview = [tabl ...