`
zhangchibang
  • 浏览: 346335 次
社区版块
存档分类
最新评论

新手入门:了解WWW服务与HTTP协议(二)

阅读更多

非持久连接和持久连接

  HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。

  非持久连接

  让我们查看一下非持久连接情况下从服务器 到客户传送一个Web页面的步骤。假设该贝面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。 再假设该基本HTML文件的URL为:www.yesky.com/somepath/index.html。

  下面是具体步骡:

  1.HTTP客户初始化一个与服务器主机www.yesky.com中的HTTP服务器的TCP连接。HTTP服务器使用默认端口号80监听来自HTTP客户的连接建立请求。

  2.HTTP客户经由与TCP连接相关联的本地套接字发出—个HTTP请求消息。这个消息中包含路径名/somepath/index.html。

  3.HTTP服务器经由与TCP连接相关联的本地套接字接收这个请求消息,再从服务器主机的内存或硬盘中取出对象/somepath/index.html,经由同一个套接字发出包含该对象的响应消息。

  4.HTTP服务器告知TCP关闭这个TCP连接(不过TCP要到客户收到刚才这个响应消息之后才会真正终止这个连接)。

  5.HTTP客户经由同一个套接字接收这个响应消息。TCP连接随后终止。该消息标明所封装的对象是一个HTML文件。客户从中取出这个文件,加以分析后发现其中有10个JPEG对象的引用。

  6.给每一个引用到的JPEG对象重复步骡1-4。

  浏览器在接收web页面的同时把它显示给用户。不同的浏览器可能会以略有不同的方式解释(也就是向用户显示)同一个web页面。HTTP与客户 如何解释Web页面没有任何关系,其规范([RFC 1945]和[RFC 2616I)仅仅定义HTTP客户程序和服务器程序之间的通信协议。

  上述步骤之所以称为使用非持久连接,原因是每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他 对象。每个TCP连接只用于传输一个请求消息和一个响应消息。就上述例子而言,用户每请求一次那个web页面,就产生11个TCP连接。

  在上述步骡中,我们有意不说清客户是通过10个串行的TCP连接先后取得所有JPEG对象,还是通过并行的TCP连接同时取得其中某些JPEG 对象。实际上,现今的浏览器允许用户通过配置来控制并行连接的程度。大多数浏览器默认可以打开5到10个并行的TCP连接,每个连接处理一个请求—响应事 务。用户要是喜欢,可以把最大并行连接数设为l,那样的话这10个连接是串行地建立的。我们将在第3章看到,使用并行连接可以缩短响应时间。

  继续介绍之前,先估算一下从客户请求基本HTML文件到它收到该文件所经历的时间。为此我们定义往返时间(round trip time,简称RTT),它是一个小分组从客户主机游动到服务器主机再返回客户主机所花的时间。RTT包括分组传播延迟、在中间路由器和交换机土的分组排 队延迟以及分组处理延迟。下面考虑用户点击某个超链接时会发生什么。用户的点击导致浏览器发起建立一个与Web服务器的TCP连接;这里涉及·—次“三次 握手”过程——首先是客户向服务器发送一个小的冗余消息,接着是服务器向客户确认并响应以一个小的TCP消息,最后是客户向服务器回确认。三次握手过程的 前两次结束时,流逝的时间为1个RTT。此时客户把HTTP请求消息发送到TCP连接中,客户接着把三次握手过程最后一次中的确认捎带在包含这个消息的数 据分节中发送以去。服务器收到来自TCP连接的请求消息后,把相应的HTML文件发送到TCP连接中,服务器接着把对早先收到的客户请求的确认捎带在包含 该HTML文件的数据分节中发送出去。这个HTTP请求顺应交互也花去1个RTT时间。因此,总的响应时间粗略地算是2个RTT加上服务器发送这个 HTMI文件的时间。

  持久连接

  非持久连接有些缺点。首先,客户得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接,TCP得在客户端和服务器端分配TCP缓冲 区,并维持TCP变量。对于有可能同时为来自数百个不同客户的请求提供服务的web服务器来说,这会严重增加其负担。其次,如前所述,每个对象都有2个 RTT的响应延长——一个RTT用于建立TCP连接,另—个RTT用于请求和接收对象。最后,每个对象都遭受TCP缓启动,因为每个TCP连接都起始于缓 启动阶段。不过并行TCP连接的使用能够部分减轻RTT延迟和缓启动延迟的影响。

  在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面 (上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个web页面也可以通 过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线 (without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,web页面所引用的每个对象 (上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水 线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服 务器资源便闲置了。

  HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接 一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到 的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请 求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,缓启动延迟也比较小。其原因在于既然各个对象使用同一 个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。

分享到:
评论

相关推荐

    圆方圆Python入门:超适合小白的python新手教程.docx

    ### 圆方圆Python入门:超适合小白的Python新手教程 #### Python简介与设计哲学 Python是一种高级编程语言,集解释性、编译性、互动性和面向对象编程于一体。它的设计初衷是为了提高编程效率和代码可读性。Python...

    VoIP新手入门级培训资料

    VoIP新手入门级培训资料通常会涵盖以下关键知识点: 1. **VoIP基础概念**:理解VoIP的基本原理,包括如何将声音转化为数据包、如何使用网络协议如UDP或TCP进行传输,以及如何将数据包还原为可听的声音。 2. **硬件...

    symbian 新手入门 中文版

    《Symbian新手入门中文版》是一本专为初次接触Symbian操作系统的学习者准备的指南,旨在帮助读者快速理解并掌握Symbian系统的基本概念、功能和开发技巧。Symbian作为曾经广泛应用于智能手机的操作系统,具有丰富的...

    Dubbo新手入门实例HelloWorld(zookeeper)源码

    在本实例中,“Dubbo新手入门实例HelloWorld(zookeeper)”旨在帮助初学者了解如何结合Dubbo和Zookeeper创建一个简单的服务提供者和消费者。首先,我们需要理解这两个关键组件: 1. **Dubbo**: Dubbo的核心功能包括...

    linux新手入门资料

    Linux新手入门资料是一套专为初学者设计的学习资源,涵盖了Linux操作系统的基础知识、常用指令以及相关的教程。这个压缩包包含了丰富的材料,可以帮助你快速踏入Linux的世界。以下将详细阐述其中可能涉及的一些关键...

    FireBird新手入门教程

    ### FireBird新手入门教程 #### 一、简介与安装 **FireBird**,简称**FB**,是一款基于Interbase的开源关系型数据库管理系统。它以其稳定性、高效性和强大的功能受到开发者的青睐。对于初学者来说,掌握FireBird的...

    webservice新手入门实例

    在这个新手入门实例中,你将学习到以下关键知识点: 1. **创建Web Service**:首先,你需要创建一个提供服务的服务器端程序,通常使用Java的JAX-WS(Java API for XML Web Services)或者.NET的ASMX等技术。这个...

    USB通讯协议 (新手绝对入门) 中文版ppt.rar

    USB通讯协议是现代电子设备间数据传输的一种标准...通过深入学习这份"USB通讯协议 (新手绝对入门) 中文版ppt",初学者可以逐步了解USB的工作原理,掌握USB设备的开发和调试技巧,为实际项目中的USB应用打下坚实的基础。

    cisco模拟器新手入门案例/计网配置.pptx

    【Cisco模拟器新手入门案例/计网配置】的讲解涵盖了多个关键网络配置概念,适合初次接触思科模拟器的初学者。在这个PPT中,主要讲述了如何配置交换机,包括了VLAN、静态路由、VTP、交换树、DHCP服务、链路聚合、RIP...

    SOA新手入门.doc

    在技术层面,Web服务是实现SOA的常用方法,特别是基于XML的简单对象访问协议(SOAP)、Web服务描述语言(WSDL)和统一描述、发现和集成(UDDI)标准的出现,为SOA提供了标准化的实现途径。此外,SOA也可以利用其他...

    nsis 新手入门教程

    4. **调试与优化**:运行编译后的安装程序,检查是否有错误,根据需要回到第二步进行修改和重编译。 在NSIS脚本中,主要有以下几个关键组成部分: - **安装程序属性**:定义安装程序的行为和界面风格,如安装窗口...

    新手入门摄像头

    5. "新手入门摄像头-第二篇-OV7620和OV7670的比较.pdf" - 在这篇文章中,读者可以了解到OV7620和OV7670之间的差异,包括分辨率、帧率、功耗等方面,有助于选择合适的传感器。 6. "新手入门摄像头-第三篇:智能车...

    Java_技术新手入门,好东西

    ### Java技术新手入门知识点详解 #### 一、Java技术概览 - **定义与特性**:Java技术是一种高级面向对象的编程语言,同时也是一种运行环境。它的核心特性之一是“一次编写,到处运行”(Write Once Run Anywhere, ...

    新手入门redis 项目使用

    新手入门Redis并将其应用于项目中,需要理解其数据结构、集群机制、容错策略和与Spring Session集成的方法。通过实践操作,将Redis的高效缓存、快速响应与分布式存储能力融入到业务管理平台的开发与运维中,可以显著...

    Dubbo新手入门实例HelloWorld(zookeeper)源码低分版

    Dubbo新手入门实例“HelloWorld”是初学者学习分布式服务框架Dubbo的典型起点。这个实例结合了Zookeeper作为注册中心,帮助理解Dubbo的基本工作原理。以下将详细讲解涉及的知识点。 首先,Dubbo是一个高性能、轻量...

    Lightroom_6数码照片处理从新手到高手视频教程第1章 软件入门:Lightroom安装.zip

    在本《Lightroom_6数码照片处理从新手到高手视频教程》的第一章“软件入门:Lightroom安装”中,我们将深入探讨Adobe Lightroom这一强大的照片管理和编辑工具的基础知识。这章教程旨在帮助初学者顺利安装并熟悉软件...

    聊天程序 适合新手入门

    标题中的“聊天程序 适合新手入门”意味着我们将讨论一个初级级别的编程项目,旨在帮助初学者了解如何构建一个简单的聊天应用程序。这个程序很可能是基于客户端-服务器架构,使用了VC++编程语言,并涉及到socket编程...

    Selenium私房菜(新手入门教程)

    ### Selenium私房菜(新手入门教程) #### 一、Selenium简介 Selenium是一个流行的开源自动化测试工具,主要用于Web应用程序的测试。它能够模拟真实用户的操作,在不同的浏览器中执行自动化测试,例如Internet ...

    HTML5新手入门指南

    ### HTML5新手入门指南 #### 一、HTML5概述与技术组成 HTML5不仅是一种标记语言,它还代表了一个全新的网络应用开发框架。这个框架涵盖了HTML、CSS和JavaScript这三个核心部分,共同推动着现代网络应用的发展。...

    飞思卡尔XS128新手入门第一资料,必看哦。分享

    3. 外设接口与通信协议:介绍各种I/O接口和通信协议的使用方法。 4. CODEWARRIOR使用教程:详述如何配置IDE、创建项目、编写和调试代码。 5. 实例与实践:通过实例项目,指导读者动手实践,巩固理论知识。 总结,...

Global site tag (gtag.js) - Google Analytics