`

HTTP/1.1与HTTP/1.0的区别

阅读更多

下面主要从几个不同的方面介绍HTTP/1.0与HTTP/1.1之间的差别,当然,更多的内容是放在解释这种差异背后的机制上。

1 可扩展性

可扩展性的一个重要原则:如果HTTP的某个实现接收到了自身未定义的头域,将自动忽略它。

Ø  在消息中增加版本号,用于兼容性判断。注意,版本号只能用来判断逐段(hop-by-hop)的兼容性,而无法判断端到端(end-to-end)的兼容性。
例如,一台HTTP/1.1的源服务器从使用HTTP/1.1的Proxy那儿接收到一条转发的消息,实际上源服务器并不知道终端客户使用的是HTTP/1.0还是HTTP/1.1。因此,HTTP/1.1定义Via头域,用来记录消息转发的路径,它记录了整个路径上所有发送方使用的版本号。

Ø  HTTP/1.1增加了OPTIONS方法,它允许客户端获取一个服务器支持的方法列表。

Ø  为了与未来的协议规范兼容,HTTP/1.1在请求消息中包含了Upgrade头域,通过该头域,客户端可以让服务器知道它能够支持的其它备用通信协议,服务器可以据此进行协议切换,使用备用协议与客户端进行通信。

2 缓存

在HTTP/1.0中,使用Expire头域来判断资源的fresh或stale,并使用条件请求(conditional request)来判断资源是否仍有效。例如,cache服务器通过If-Modified-Since头域向服务器验证资源的Last-Modefied头域是否有更新,源服务器可能返回304(Not Modified),则表明该对象仍有效;也可能返回200(OK)替换请求的Cache对象。

此外,HTTP/1.0中还定义了Pragma:no-cache头域,客户端使用该头域说明请求资源不能从cache中获取,而必须回源获取。

HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)。

HTTP/1.0中,If-Modified-Since头域使用的是绝对时间戳,精确到秒,但使用绝对时间会带来不同机器上的时钟同步问题。而HTTP/1.1中引入了一个ETag头域用于重激活机制,它的值entity tag可以用来唯一的描述一个资源。请求消息中可以使用If-None-Match头域来匹配资源的entitytag是否有变化。

为了使caching机制更加灵活,HTTP/1.1增加了Cache-Control头域(请求消息和响应消息都可使用),它支持一个可扩展的指令子集:例如max-age指令支持相对时间戳;private和no-store指令禁止对象被缓存;no-transform阻止Proxy进行任何改变响应的行为。

Cache使用关键字索引在磁盘中缓存的对象,在HTTP/1.0中使用资源的URL作为关键字。但可能存在不同的资源基于同一个URL的情况,要区别它们还需要客户端提供更多的信息,如Accept-Language和Accept-Charset头域。为了支持这种内容协商机制(content negotiation mechanism),HTTP/1.1在响应消息中引入了Vary头域,该头域列出了请求消息中需要包含哪些头域用于内容协商。

3 带宽优化

HTTP/1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了。例如,客户端只需要显示一个文档的部分内容,又比如下载大文件时需要支持断点续传功能,而不是在发生断连后不得不重新下载完整的包。

HTTP/1.1中在请求消息中引入了range头域,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码为206(Partial Content),它可以防止Cache将响应误以为是完整的一个对象。

另外一种情况是请求消息中如果包含比较大的实体内容,但不确定服务器是否能够接收该请求(如是否有权限),此时若贸然发出带实体的请求,如果被拒绝也会浪费带宽。

HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);如果服务器接收此请求就回送响应码100,客户端就可以继续发送带实体的完整请求了。注意,HTTP/1.0的客户端不支持100响应码。但可以让客户端在请求消息中加入Expect头域,并将它的值设置为100-continue。

节省带宽资源的一个非常有效的做法就是压缩要传送的数据。Content-Encoding是对消息进行端到端(end-to-end)的编码,它可能是资源在服务器上保存的固有格式(如jpeg图片格式);在请求消息中加入Accept-Encoding头域,它可以告诉服务器客户端能够解码的编码方式。

而Transfer-Encoding是逐段式(hop-by-hop)的编码,如Chunked编码。在请求消息中加入TE头域用来告诉服务器能够接收的transfer-coding方式,

4 长连接

HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。此外,由于大多数网页的流量都比较小,一次TCP连接很少能通过slow-start区,不利于提高带宽利用率。

HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。

HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。

在HTTP/1.0中,要建立长连接,可以在请求消息中包含Connection: Keep-Alive头域,如果服务器愿意维持这条连接,在响应消息中也会包含一个Connection: Keep-Alive的头域。同时,可以加入一些指令描述该长连接的属性,如max,timeout等。

事实上,Connection头域可以携带三种不同类型的符号:

1、一个包含若干个头域名的列表,声明仅限于一次hop连接的头域信息;

2、任意值,本次连接的非标准选项,如Keep-Alive等;

3、close值,表示消息传送完成之后关闭长连接;

 

客户端和源服务器之间的消息传递可能要经过很多中间节点的转发,这是一种逐跳传递(hop-by-hop)。HTTP/1.1相应地引入了hop-by-hop头域,这种头域仅作用于一次hop,而非整个传递路径。每一个中间节点(如Proxy,Gateway)接收到的消息中如果包含Connection头域,会查找Connection头域中的一个头域名列表,并在将消息转发给下一个节点之前先删除消息中这些头域。

通常,HTTP/1.0的Proxy不支持Connection头域,为了不让它们转发可能误导接收者的头域,协议规定所有出现在Connection头域中的头域名都将被忽略。

5 消息传递

HTTP消息中可以包含任意长度的实体,通常它们使用Content-Length来给出消息结束标志。但是,对于很多动态产生的响应,只能通过缓冲完整的消息来判断消息的大小,但这样做会加大延迟。如果不使用长连接,还可以通过连接关闭的信号来判定一个消息的结束。

HTTP/1.1中引入了Chunkedtransfer-coding来解决上面这个问题,发送方将消息分割成若干个任意大小的数据块,每个数据块在发送时都会附上块的长度,最后用一个零长度的块作为消息结束的标志。这种方法允许发送方只缓冲消息的一个片段,避免缓冲整个消息带来的过载。

在HTTP/1.0中,有一个Content-MD5的头域,要计算这个头域需要发送方缓冲完整个消息后才能进行。而HTTP/1.1中,采用chunked分块传递的消息在最后一个块(零长度)结束之后会再传递一个拖尾(trailer),它包含一个或多个头域,这些头域是发送方在传递完所有块之后再计算出值的。发送方会在消息中包含一个Trailer头域告诉接收方这个拖尾的存在。

6 Host头域

在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

7 错误提示

HTTP/1.0中只定义了16个状态响应码,对错误或警告的提示不够具体。HTTP/1.1引入了一个Warning头域,增加对错误或警告信息的描述。

此外,在HTTP/1.1中新增了24个状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

8 内容协商

为了满足互联网使用不同母语和字符集的用户,一些网络资源有不同的语言版本(如中文版、英文版)。HTTP/1.0定义了内容协商(contentnegotiation)的概念,也就是说客户端可以告诉服务器自己可以接收以何种语言(或字符集)表示的资源。例如如果服务器不能明确客户端需要何种类型的资源,会返回300(Multiple Choices),并包含一个列表,用来声明该资源的不同可用版本,然后客户端在请求消息中包含Accept-Language和Accept-Charset头域指定需要的版本。

就像有些人会说几门外语,但每种外语的流利程度并不相同。类似地,网络资源也可以有不同的表达形式,比如有母语版和各种翻译版本。HTTP引入了一个品质因子(quality values)的概念来表示不同版本的可用性,它的取值从0.0到1.0。例如一个母语是英语的人也能讲法语、甚至还学了点丹麦语,那么他的浏览器可用作如下配置:Accept-Language: en, fr;q=0.5, da;q=0.1。这时,服务器会优先选取品质因子高的值对应的资源版本作为响应。

 

参考资料

[1] Brian Totty, "HTTP: The DefinitiveGuide", O'REILLY & ASSOC INC, 27, Sep., 2002.

[2] B. Krishnamurthy, J. C. Mogul, and D.M. Kristol, "Key Differences between HTTP/1.0 and HTTP/1.1",http://www2.research.att.com/~bala/papers/h0vh1.html.

分享到:
评论

相关推荐

    UVC 1.0/1.1/1.5协议

    **UVC 1.0/1.1/1.5协议详解** USB Video Class (UVC) 是一种标准,用于定义USB设备上的视频捕获功能,使得计算机可以通过USB接口与各种视频源(如网络摄像头、摄像机等)进行通信。UVC 1.0、1.1和1.5是这一标准的...

    (中文完整版) HTTP协议1.1 .doc

    HTTP/1.1是HTTP协议的第四个主要版本,相较于之前的HTTP/1.0,它进行了诸多改进以应对不断增长的网络需求。 HTTP/1.1的主要改进点包括: 1. **持久连接(Persistent Connections)**:HTTP/1.1引入了持久连接,...

    超文本传输协议-HTTP/1.1

    - **安全传输**:虽然HTTP/1.1本身不提供加密功能,但它可以与SSL/TLS协议结合使用,形成HTTPS,以实现数据的安全传输。 - **认证机制**:支持Basic Auth、Digest Auth等多种认证机制,确保只有授权用户才能访问受...

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

    HTTP/1.1在HTTP/1.0的基础上进行了很多改进和增强,旨在提高性能、减少延迟以及增加更多的功能。以下是一些关键的HTTP/1.1知识点: 1. **持续连接**:HTTP/1.0中每个请求都需要建立一个新的TCP连接,而HTTP/1.1引入...

    Http_1.1Specification

    HTTP/1.1相比其前代版本HTTP/1.0,在多个方面做出了改进和补充。例如,HTTP/1.1增加了对分层代理、缓存以及稳定连接和虚拟主机的支持,并且详细阐述了新的协议要求和术语定义。为了提供更多的功能性,HTTP/1.1允许...

    http 1.1/1.0 RFC中文文档

    在这个压缩包中包含的两个文件,RFC2616(HTTP/1.1)中文版.pdf和RFC1945(HTTP/1.0)中文版.pdf,分别是对HTTP 1.1和HTTP 1.0协议的官方文档的中文翻译。 HTTP 1.0是早期的版本,它定义了HTTP的基本操作,如GET、...

    HTTP 1.1与HTTP 1.0的比较

    ### HTTP 1.1与HTTP 1.0的主要区别 #### 持久连接(Persistent Connections) - **HTTP 1.0**:默认情况下,HTTP 1.0使用非持久连接,即每次请求都需要建立一个新的TCP连接。这种设计虽然简单,但在实际应用中导致...

    las格式说明,1.0/1.1、1.2/1.3/1.4

    以下是关于LAS 1.0/1.1、1.2/1.3/1.4版本的关键知识点: 1. **版本1.0/1.1:** - LAS 1.0是最早的版本,主要用于基本的三维点云数据存储,支持基本的点类型和元数据。 - LAS 1.1引入了更多的点类型,增强了对植被...

    http1.1 http1.1

    HTTP/1.1的主要目的是为了改进前一版本HTTP/1.0中的不足之处,提高性能和灵活性。该协议的设计遵循以下基本原则: - **无状态性**:服务器不保存关于客户端的任何信息,每个请求都是独立的。 - **可缓存性**:支持...

    TLS1.0、1.1、1.2、1.3

    标题提及的“TLS1.0、1.1、1.2、1.3”指的是安全传输层协议(Transport Layer Security)的不同版本。TLS是互联网上广泛使用的安全协议,它确保了数据在客户端和服务器之间的加密传输,从而保护用户的隐私和信息安全...

    *.las文件格式说明(1.0/1.1/1.2/1.3/1.4)

    **LAS文件格式详解** LAS(Laser Aerial Survey)文件格式是一种广泛用于...了解这些版本的区别对于正确解析和利用LiDAR数据至关重要。在处理LAS文件时,应确保软件支持相应的版本,以确保数据完整性和处理的准确性。

    HTTP1.0&HTTP1.1(rfc2616)

    这里我们将深入探讨这两个版本的区别与特点。 **HTTP1.0** HTTP1.0是HTTP协议的第一个广泛使用的版本,它定义了Web的基本通信机制。在HTTP1.0中,主要包含以下关键特性: 1. **请求方法**:HTTP1.0支持GET、POST和...

    rfc1945.zip_HTTP/1.0_Hypertext_RFC1945

    《HTTP/1.0协议详解——基于RFC1945》 HTTP(HyperText Transfer Protocol)超...虽然现在已被HTTP/1.1和HTTP/2所取代,但在许多场景下,我们仍能看到HTTP/1.0的身影。理解其工作原理对于网络开发和优化具有重要意义。

    Http1.1协议pdf版

    HTTP(超文本传输协议)是互联网上应用最广泛的一种网络协议,而HTTP/1.1是HTTP协议的最新版本,它在HTTP/1.0的基础上进行了诸多改进,以提高网络性能和用户体验。这份PDF文档详细地介绍了HTTP/1.1协议的核心概念、...

    HTTP1.1翻译完全版.doc

    HTTP/1.1 是 HTTP 协议的一个重要版本,详细规范在 RFC 2616 中提出,是对之前 HTTP/1.0 版本的修订和增强。HTTP/1.1 的设计目标是解决 HTTP/1.0 中存在的问题,如对分层代理、高速缓存、持久连接和虚拟主机的支持...

Global site tag (gtag.js) - Google Analytics