HTTP 1.1与HTTP 1.0的比较
一个WEB站点每天可能要接收到上百万的用户请求,为了提高系统的效率,HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。但是,这也造成了一些性能上的缺陷,例如,一个包含有许多图像的网页文件中并没有包含真正的图像数据内容,而只是指明了这些图像的URL地址,当WEB浏览器访问这个网页文件时,浏览器首先要发出针对该网页文件的请求,当浏览器解析WEB服务器返回的该网页文档中的HTML内容时,发现其中的<img>图像标签后,浏览器将根据<img>标签中的src属性所指定的URL地址再次向服务器发出下载图像数据的请求,如图3.3所示。
<shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"></path><lock v:ext="edit" aspectratio="t"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 325.5pt; HEIGHT: 223.5pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5Cgaocao%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png" o:title="ళళX"></imagedata></shape>
图3.3
显然,访问一个包含有许多图像的网页文件的整个过程包含了多次请求和响应,每次请求和响应都需要建立一个单独的连接,每次连接只是传输一个文档和图像,上一次和下一次请求完全分离。即使图像文件都很小,但是客户端和服务器端每次建立和关闭连接却是一个相对比较费时的过程,并且会严重影响客户机和服务器的性能。当一个网页文件中包含Applet,JavaScript文件,CSS文件等内容时,也会出现类似上述的情况。
为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间。基于HTTP 1.1协议的客户机与服务器的信息交换过程,如图3.4所示。
<shape id="_x0000_i1027" style="WIDTH: 370.5pt; HEIGHT: 138.75pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5Cgaocao%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png" o:title=""></imagedata></shape>
图3.4
可见,HTTP 1.1在继承了HTTP 1.0优点的基础上,也克服了HTTP 1.0的性能问题。不仅如此,HTTP 1.1还通过增加更多的请求头和响应头来改进和扩充HTTP 1.0的功能。例如,由于HTTP 1.0不支持Host请求头字段,WEB浏览器无法使用主机头名来明确表示要访问服务器上的哪个WEB站点,这样就无法使用WEB服务器在同一个IP地址和端口号上配置多个虚拟WEB站点。在HTTP 1.1中增加Host请求头字段后,WEB浏览器可以使用主机头名来明确表示要访问服务器上的哪个WEB站点,这才实现了在一台WEB服务器上可以在同一个IP地址和端口号上使用不同的主机名来创建多个虚拟WEB站点。HTTP 1.1的持续连接,也需要增加新的请求头来帮助实现,例如,Connection请求头的值为Keep-Alive时,客户端通知服务器返回本次请求结果后保持连接;Connection请求头的值为close时,客户端通知服务器返回本次请求结果后关闭连接。HTTP 1.1还提供了与身份认证、状态管理和Cache缓存等机制相关的请求头和响应头。
Accept-Language
Accept-Language头字段用于指定客户机期望服务器返回哪个国家语言的文档,可以指定多个以逗号分隔的国家语言。对于一些WEB站点,可以根据用户所使用的浏览器国家语言版本的不同,分别返回该国家语言的网页文档。例如,使用中文的IE浏览器访问www.google.com站点时,服务器返回的是使用中文语言的网页文件。单击IE浏览器的“工具”à“Internet选项”菜单,在打开的“Internet选项”对话框中,单击“语言”按钮,在打开的“语言首选项”对话框中添加英语,并将其上移到语言列表中的第一个位置,如图3.14所示。
<shape id="_x0000_i1026" style="WIDTH: 339pt; HEIGHT: 338.25pt" type="#_x0000_t75"><imagedata src="file:///C:%5CDOCUME~1%5Cgaocao%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.png" o:title=""></imagedata></shape>
图3.14
设置好语言首选项后,再次访问www.google.com站点,这时服务器返回的是使用英语的网页文件。上面的实验结果很可能会受到google站点策略调整和Cookie的影响,例如,作者在编写本书的初稿时,按照上面的操作,看到了预期的效果,但等到作者几个月后再次校稿时,即使将英语设置成了语言首先项,但所看到的结果却仍然是中文网页。这可能是由于英语已成为了国际通用语言的原因,google对语言首选项设置成英语的情况进行了忽略吧!如果把语言首选项设置成日语后,服务器可以返回日语的网页文件。
在WEB服务器上实现上述功能的原理非常简单,因为,IE浏览器会根据“语言首选项”对话框中的语言列表,生成相应的Accept-Language请求头,例如,
Accept-Language: en-gb,zh-cn
WEB服务器只要检查Accept-Language请求头中的信息,按照其中设置的国家语言的先后顺序,就知道应该返回哪种国家语言的网页文档给浏览器。如果WEB服务器不能返回位于Accept-Language设置值前面的国家语言的网页文档时,WEB服务器将返回后面的国家语言的网页文档。关于各个国家语言的名称信息,例如,中国是zh-cn,可以参阅RFC 1766,其实,只要在图3.14中添加进某个国家的语言,显示在中括号里面的内容就是这个国家语言的名称。
:动手体验:Accept-Language头字段的作用
(1)在命令行窗口中执行telnet www.google.com 80,在成功连接后启动的telnet程序窗口中,输入如下几行内容:
GET / HTTP/1.1
Host:
Accept-Language: en-us,zh-cn
<空行>
可以看到google返回的正文部分是英文字符的网页文档。省略上面的Accept-Language字段部分,google默认返回的正文部分也是英文字符的网页文档。
(2)重新连接上google站点,在成功连接后启动的telnet程序窗口中,输入如下几行内容:
GET / HTTP/1.1
Host:
Accept-Language: zh-cn
<空行>
可以看到google返回的正文部分是中文字符的网页文档。
分享到:
相关推荐
HTTP 1.0 和 HTTP 1.1 的差异 HTTP(HyperText Transfer Protocol)是一种应用层协议,用于数据交换过程和数据本身的格式。它是 TCP/IP 中的一个应用协议,主要有两个版本:HTTP 1.0 和 HTTP 1.1。 HTTP 1.0 的...
geronimo-jms_1.1_spec-1.0.jar
HTTP1.0和HTTP1.1是其两个主要版本,它们在互联网通信中扮演着至关重要的角色。这里我们将深入探讨这两个版本的区别与特点。 **HTTP1.0** HTTP1.0是HTTP协议的第一个广泛使用的版本,它定义了Web的基本通信机制。在...
geronimo-interceptor_1.1_spec-1.0
在这个压缩包中包含的两个文件,RFC2616(HTTP/1.1)中文版.pdf和RFC1945(HTTP/1.0)中文版.pdf,分别是对HTTP 1.1和HTTP 1.0协议的官方文档的中文翻译。 HTTP 1.0是早期的版本,它定义了HTTP的基本操作,如GET、...
**UVC 1.0/1.1/1.5协议详解** USB Video Class (UVC) 是一种标准,用于定义USB设备上的视频捕获功能,使得计算机可以通过USB接口与各种视频源(如网络摄像头、摄像机等)进行通信。UVC 1.0、1.1和1.5是这一标准的...
标题提及的“TLS1.0、1.1、1.2、1.3”指的是安全传输层协议(Transport Layer Security)的不同版本。TLS是互联网上广泛使用的安全协议,它确保了数据在客户端和服务器之间的加密传输,从而保护用户的隐私和信息安全...
极智go1.1驱动是专用于极智复刻者go1.1鼠标的驱动程序,用户可以通过它自定义设置鼠标的快捷键组合以及鼠标dpi和鼠标灯光颜色等等,非常的方便快捷,拥有这款鼠标的小伙伴们可以下载了!驱动介绍:极智go1.1驱动是专...
"TCG Glossary V1.1 Rev 1.0.pdf"是该组织发布的一份词汇表,详细解释了与可信计算相关的术语和概念。这份文档对于理解和实施TPM(Trusted Platform Module,可信平台模块)等相关技术至关重要。 TPM是一种硬件安全...
**JSTL1.1与JSTL1.0详解** JavaServer Pages Standard Tag Library (JSTL) 是一个用于简化JavaServer Pages (JSP) 开发的标签库,它提供了一系列预定义的标签,帮助开发者处理常见的任务,如迭代、条件判断、XML...
HTTP1.1相对于HTTP1.0做了许多改进,包括但不限于连接管理的优化、支持持久连接、增加新的请求方法、引入更多首部字段以及对缓存机制的强化。例如,HTTP1.1引入了Keep-Alive首部,允许在一个TCP连接上发送多个请求和...
《CCIX基础规范修订1.1版1.0》详细阐述了Cache Coherent Interconnect for Accelerators(CCIX)技术的起源、发展及其与Peripheral Component Interconnect Express(PCIe)的兼容性和区别。该规范旨在提供一个高...
在本主题中,我们将深入探讨如何在 J2ME 平台上实现水波倒影效果,同时关注 CLDC1.1 和 CLDC1.0 版本的差异。 首先,"水波倒影" 是一种视觉特效,通常用于增强图形用户界面的吸引力。在 J2ME 应用程序中,这种效果...