




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
HTTP协议是什么我们在浏览器的地址栏里输入的网站地址叫做URL(UniformResourceLocator,统一资源定位符)。就像每家每户都有一个门牌地址一样,每个网页也都有一个Internet地址。当你在浏览器的地址框中输入一个URL或是单击一个超级链接时,URL就确定了要浏览的地址。浏览器通过超文本传输协议(HTTP),将Web服务器上站点的网页代码提取出来,并翻译成漂亮的网页。因此,在我们认识HTTP之前,有必要先弄清楚URL的组成,例如:/china/index.htm。它的含义如下:1.http:/:代表超文本传输协议,通知服务器显示Web页,通常不用输入;2.www:代表一个Web(万维网)服务器;3.M/:这是装有网页的服务器的域名,或站点服务器的名称;4.China/:为该服务器上的子目录,就好像我们的文件夹;5.Index.htm:index.htm是文件夹中的一个HTML文件(网页)。我们知道,Internet的基本协议是TCP/IP协议,然而在TCP/IP模型最上层的是应用层(Applicationlayer),它包含所有高层的协议。高层协议有:文件传输协议FTP、电子邮件传输协议SMTP、域名系统服务DNS、网络新闻传输协议NNTP和HTTP协议等。HTTP协议(HypertextTransferProtocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以“http:/”开头的原因。二、HTTP是怎样工作的既然我们明白了URL的构成,那么HTTP是怎么工作呢?我们接下来就要讨论这个问题。由于HTTP协议是基于请求/响应范式的(相当于客户机/服务器)。一个客户机与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理和服务器之间通过一个单独的连接来完成。在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。基于HTTP协议的客户/服务器模式的信息交换过程,它分四个过程:建立连接、发送请求信息、发送响应信息、关闭连接。其实简单说就是任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。你的浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。在这一过程中,在网络上发送和接收的数据已经被分成一个或多个数据包(packet),每个数据包包括:要传送的数据;控制信息,即告诉网络怎样处理数据包。TCP/IP决定了每个数据包的格式。如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。HTTP协议的运作方式HTTP协议是基于请求响应范式的。一个客户机与服务器建 立连接后,发送一个请求给服务器,请求方式的格式为,统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。服务器接 到请求后,给予相应的响应信息,其格式为一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内 容。许多HTTP通讯是由一个用户代理初始化的并且包括一个申请在源服务器上资源的请求。最简单的情况可能是在用户代理(UA)和源服务器(O)之间通过一个单独的连接来完成(见图2-1)。图2-1 当一个或多个中介出现在请求响应链中时,情况就变得复杂一些。中介由三种:代理(Proxy)、网关(Gateway)和通道 (Tunnel)。一个代理根据URI的绝对格式来接受请求,重写全部或部分消息,通过URI的标识把已格式化过的请求发送到服务器。网关是一个接收代 理,作为一些其它服务器的上层,并且如果必须的话,可以把请求翻译给下层的服务器协议。一个通道作为不改变消息的两个连接之间的中继点。当通讯需要通过一 个中介(例如:防火墙等)或者是中介不能识别消息的内容时,通道经常被使用。图2-2 上面的图2-2表明了在用户代理(UA)和源服务器(O)之间有三个中介(A,B和C)。一个通过整个链的请求或响应消息必须经过四个 连接段。这个区别是重要的,因为一些HTTP通讯选择可能应用于最近的连接、没有通道的邻居,应用于链的终点或应用于沿链的所有连接。尽管图2-2是线性 的,每个参与者都可能从事多重的、并发的通讯。例如,B可能从许多客户机接收请求而不通过A,并且或者不通过C把请求送到A,在同时它还可能处理A的请 求。任何针对不作为通道的汇聚可能为处理请求启用一个内部缓存。缓存的效果是请求响应链被缩短,条件是沿链的参与者之一具有一个缓存的响应作用于那个请求。下图说明结果链,其条件是针对一个未被UA或A加缓存的请求,B有一个经过C来自O的一个前期响应的缓存拷贝。图2-3 在Internet上,HTTP通讯通常发生在TCP/IP连接之上。缺省端口是TCP80,但其它的端口也是可用的。但这并不预示着HTTP协议在Internet或其它网络的其它协议之上才能完成。HTTP只预示着一个可靠的传输。以上简要介绍了HTTP协议的宏观运作方式,下面介绍一下HTTP协议的内部操作过程。首先,简单介绍基于HTTP协议的客户/服务器模式的信息交换过程,如图2-4所示,它分四个过程,建立连接、发送请求信息、发送响应信息、关闭连接。图2-4 在WWW中,“客户”与“服务器”是一个相对的概念,只存在于一个特定的连接期间,即在某个连接中的客户在另一个连接中可能作为服务器。WWW服务器运行时,一直在TCP80端口(WWW的缺省端口)监听,等待连接的出现。 下面,讨论HTTP协议下客户/服务器模式中信息交换的实现。1.建立连接连接的建立是通过申请套接字(Socket)实现的。客户打开一个套 接字并把它约束在一个端口上,如果成功,就相当于建立了一个虚拟文件。以后就可以在该虚拟文件上写数据并通过网络向外传送。2.发送请求打开一个连接后,客户机把请求消息送到服务器的停留端口上,完成提出请求动作。HTTP/1.0请求消息的格式为:请求消息=请求行(通用信息|请求头|实体头)CRLF实体内容请求行=方法请求URLHTTP版本号CRLF方法=GET|HEAD|POST|扩展方法URL=协议名称+宿主名+目录与文件名请求行中的方法描述指定资源中应该执行的动作,常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的,对应关系如下:对象GET的结果文件文件的内容程序该程序的执行结果数据库查询查询结果HEAD要求服务器查找某对象的元信息,而不是对象本身。POST从客户机向服务器传送数据,在要求服务器和CGI做进一步处理时会用到POST方法。POST主要用于发送HTML文本中FORM的内容,让CGI程序处理。一个请求的例子为:GET/zju/index.htmHTTP/1.0头信息又称为元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。请求头告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。实体头实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。实体请求或应答对象本身。3.发送响应服务器在处理完客户的请求之后,要向客户机发送响应消息。HTTP/1.0的响应消息格式如下:响应消息=状态行(通用信息头|响应头|实体头)CRLF实体内容状态行=HTTP版本号状态码原因叙述状态码表示响应类型1保留2表示请求成功地接收3为完成请求客户需进一步细化请求4客户错误5服务器错误响应头的信息包括:服务程序名,通知客户请求的URL需要认证,请求的资源何时能使用。4.关闭连接客户和服务器双方都可以通过关闭套接字来结束TCP/IP对话HTTP协议的几个重要概念1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。5.资源(Resource):由URI标识的网络数据对象或服务。6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。7.客户机(Client):一个为发送请求目的而建立连接的应用程序。8.用户代理(Useragent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。9.服务器(Server):一个接受连接并对请求返回信息的应用程序。10.源服务器(Originserver):是一个给定资源可以在其上驻留或被创建的服务器。11.代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。12.网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。14.缓存(Cache):反应信息的局域存储。超文本传输协议-HTTP(HTTP,HyperText Transfer Protocol)是因特网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP概述HTTP的发展是万维网协会(World Wide Web Consortium)和Internet工作小组(Internet Engineering Task Force)合作的结果,(他们)最终发布了一系列的RFC,其中最著名的就是RFC 2616。RFC 2616定义了HTTP协议的我们今天普遍使用的一个版本HTTP 1.1。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个客户端)叫用户代理(user agent)。应答的服务器上存储着(一些)资源,比如HTML文件和图像。(我们称)这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnels)。尽管TCP/IP协议是互联网上最流行的应用,HTTP协议并没有规定必须使用它和(基于)它支持的层。 事实上,HTTP可以在任何其他互联网协议上,或者在其他网络上实现。HTTP只假定(其下层协议提供)可靠的传输,任何能够提供这种保证的协议都可以被其使用。通常,由HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端发送过来的请求。一旦收到请求,服务器(向客户端)发回一个状态行,比如HTTP/1.1 200 OK,和(响应的)消息,消息的消息体可能是请求的文件、错误消息、或者其它一些信息。HTTP使用TCP而不是UDP的原因在于(打开一个)一个网页必须传送很多数据,而TCP协议提供传输控制,按顺序组织数据,和错误纠正。具体细节请参考TCP和UDP的不同通过HTTP或者HTTPS协议请求的资源由统一资源定位器(Uniform Resource Identifiers)(或者,更准确一些,URLs)来标识。 HTTP请求信息(Request Message)发出的请求信息包括以下几个HTTP请求行,例如GET /images/logo.gif HTTP/1.1,表示从/images 目录下请求logo.gif 这个文件。(请求)头,例如Accept-Language: en空行可选的消息体请求行和标题必须以 作为结尾(也就是,回车然后换行)。空行内必须只有而无其他空格。在HTTP/1.1 协议中,所有的请求头,除Host外,都是可选的。 HTTP请求方法(Request Methods)HTTP协议中定义了八种方法(有时也叫“动作”)来表示对指定数据的操作。HEAD:(Head方法)要求响应与相应的GET请求的响应一样,但是没有的响应体(response body)。这用来获得响应头(response header)中的元数据信息(meta-infomation)有(很)帮助,(因为)它不需要传输所有的内容。GET:(Get方法用来)请求指定的资源。它是目前网上最常用的方法。它不应该用于一些会造成副作用的操作中(在网络应用中用它来提交动作是一种常见的错误用法)。(细节请)参考后面的“安全方法”(这一节)。POST:(POST方法用来)向指定的资源提交需要处理的数据。这些数据写在请求的内容里。(POST请求)可以导致新资源的产生和已有资源的更新。PUT:上传指定资源DELETE:删除指定资源TRACE:(Trace方法告诉服务器端)返回收到的请求。客户端可以(通过此方法)察看在请求过程中中间服务器添加或者改变哪些内容。OPTIONS:返回服务器(在指定URL上)支持的HTTP方法。通过请求“*”而不是指定的资源,这个方法可以用来检查网络服务器的功能。CONNECT:将请求的连接转换成透明的TCP/IP通道,通常用来简化通过非加密的HTTP代理的SSL-加密通讯(HTTPS)。HTTP服务器至少应该实现Get和Head方法,可能的话,也实现OPTIONS方法。HTTP安全方法有些方法(比如HEAD, GET, OPTIONS, and TRACE) 被定义为安全方法,这些方法针对的只是信息的返回,并不会改变服务器的状态(换句话说就是这些方法不会产生副作用)。不安全的方法(例如POST, PUT and DELETE) 应该用特殊的方式向用户展示,通常是按钮而不是链接,这样就可以使用户意识到可能要负的责任(例如一个按钮带来的资金交易。)HTTP协议版本号超文本传输协议已经演化出了很多版本,它们中的大部分都是向下兼容的。客户端在请求的开始告诉服务器它采用的协议版本号,而后者则在响应中采用相同或者更早的协议版本。HTTP/0.9:已过时。只接受 GET 一种请求方法,没有在通讯中指定版本号,且不支持请求头。由于该版本不支持 POST 方法,所以客户端无法向服务器传递太多信息。 HTTP/1.0:这是第一个在通讯中指定版本号的 HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。 HTTP/1.1:当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。此版相较于 HTTP/1.0 协议的区别主要体现在:HTTP缓存处理带宽及网络连接的管理安全性及完整性HTTP状态行参见:HTTP状态码所有 HTTP 响应的第一行都是状态行, 依次是当前 HTTP 版本号,3位数字组成的状态代码,以及描述状态的短语,彼此由空格分隔。状态代码的第一个数字代表当前响应的类型:1xx 消息请求已被服务器接收,继续处理2xx 成功请求已成功被服务器接收、理解、并接受3xx 重定向需要后续操作才能完成这一请求4xx 请求错误请求含有词法错误或者无法被执行5xx 服务器错误服务器在处理某个正确请求时发生错误虽然 RFC 2616 中已经推荐了描述状态的短语,例如200 OK,404 Not Found,但是 WEB 开发者仍然能够自行决定采用何种短语,用以显示本地化的状态描述或者自定义信息。例子下面是一个HTTP客户端与服务器之间会话的例子,运行于,端口80客户端请求:GET / HTTP/1.1Host:(紧跟着一个换行,通过敲入回车实现)服务器应答:HTTP/1.1 200 OKContent-Length: 61655Content-Type: text/htmlContent-Location: /index.htmLast-Modified: Thu, 23 Oct 2008 01:51:26 GMTAccept-Ranges: bytesETag: 70e053dcb134c91:3554Server: Microsoft-IIS/6.0Date: Thu, 23 Oct 2008 01:59:25 GMTConnection: closeConnection: keep-alive(紧跟着一个空行,并且由HTML格式的文本组成了中国协议分析网的主页)在HTTP1.0中,客户端发送一个请求至服务器,服务器发送一个应答至客户端。之后,连接将被释放。另一方面,HTTP1.1支持持久连接。这使得客户端可以发送请求并且接收应答,然后迅速的发送另一个请求和接收另一个应答。因为多个额外的请求,TCP连接并没有被释放,而每个请求中关于TCP的负载相对较少。同时,在得到上一个请求的应答之前发送多个请求(通常是两个)也成为可能。这个技术被称为“流水线”。Internet上的WWW服务与HTTP协议web最吸引用户的也许是它的随选(on demand)操作性。用户只在想要时收到所要的东西。除了随选操作性,Web还有许多大家喜爱的其他精彩特性。任何个人都可以极其容易地在Web上公布任何信息;任何人都可能以极低的成本成为发行人。超链接和搜索引擎帮助我们在Web站点的海洋中导航。图形和动画刺激着我们的感官。表单、Java小应用程序、Activex控件以及其他许多设备使得我们能与Web页面和站点交互。Web还越来越普遍地提供存放在因特网中的、可随选访问(即点播)的大量音频和视频材料的菜单接口。HTTP概貌Web的应用层协议HTTP是Web的核心。HTTP在Web的客户程序和服务器程序中得以实现。运行在不同端系统上的客户程序和服务器程序通过交换HTTP消息彼此交流。HTTP定义这些消息的结构以及客户和服务器如何交换这些消息。Web页面(web page,也称为文档)由多个对象构成。对象(object)仅仅是可由单个URL寻址的文件,例如HTML文件、JPG图像、GIF图像、JAVA小应用程序、语音片段等。大多数Web页面由单个基本HIML文件和若干个所引用的对象构成。例如,如果一个Web页面包含HTML文本和5个JPEG图像,那么它由6个对象构成,即基本HTML文件加5个图像。基本HTML文件使用相应的URL来引用本页面的其他对象。每个URL由存放该对象的服务器主机名和该对象的路径名两部分构成。HTTP定义Web客户(即浏览器)如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户。当用户请求一个Web页面(譬如说点击某个超链接)时,浏览器把请求该页面中各个对象的HTTP请求消息发送给服务器。服务器收到请求后,以运送含有这些对象HTTP响应消息作为响应。到1997年底,基本上所有的浏览器和Web服务器软件都实现了在RFC 1945中定义的HTTP/1.0版本。1998年初,一些Web服务器软件和浏览器软件开始实现在RFC 2616中定义的HTTP/1.1版本。H1TP/1.1与HTTP/1.0后向兼容;运行1.1版本的web服务器可以与运行1.0版本的浏览器“对话”,运行1.1版本的浏览器也可以与运行1.0版本的Web服务器“对话”。HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的“门”。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。我们可从中看到分层网络体系结构的一个明显优势HTTP不必担心数据会丢失,也无需关心TCP如何从数据的丢失和错序中恢复出来的细节。这些是TCP和协议栈中更低协议层的任务。TCP还使用一个拥塞控制机制。该机制迫使每个新的TCP连接一开始以相对缓慢的速率传输数据,然而只要网络不拥塞,每个连接可以迅速上升到相对较高的速率。这个慢速传输的初始阶段称为缓启动(slow start)。需要注意的是,在向客户发送所请求文件的同时,服务器并没有存储关于该客户的任何状态信息。即便某个客户在几秒钟内再次请求同一个对象,服务器也不会响应说:自己刚刚给它发送了这个对象。相反,服务器重新发送这个对象,因为它已经彻底忘记早先做过什么。既然HTTP服务器不维护客户的状态信息,我们于是说HTTP是一个无状态的协议(stateless protocol)。非持久连接和持久连接HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。非持久连接让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面的步骤。假设该贝面由1个基本HTML文件和10个JPEG图像构成,而且所有这些对象都存放在同一台服务器主机中。 再假设该基本HTML文件的URL为:/index.html。下面是具体步骡:1.HTTP客户初始化一个与服务器主机中的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连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。HTTP消息格式HTTP规范1.0RPcl945和1.1RFC 2616定义了HTTP消息的格式。HTTP消息分为请求消息和响应稍息两类。下面我们分别进行介绍。HTTP请求消息下面是一个典型的HTTP请求消息:GET /somedir/page.html H7TP/1.1Host:Connection:closeUser-agent:Mozilla/4.0Accept-language:zh-cn (额外的回车符和换行符)仔细检查这个简单的请求消息,我们可从中学到不少东西。首先,这个消息是用普通的ASCII文本书写的。其次,这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车特和换行符。当然,一个请求消息可以不止这么多行,也可以仅仅只有一行。该请求消息的第一行称为请求行(request line),后续各行都称为头部行(header)。请求行有3个字段:方法字段、URL字段、HTTP版本宇段。方法字段有若干个值可供选择,包括GET、POST和HEAD。HTTP请求消息绝大多数使用GET方法,这是浏览器用来请求对象的方法,所请求的对象就在URL字段中标识。本例表明浏览器在请求对象/somedir/page.html。版本字段是不言自明的;本例中浏览器实现的是HTTP/1.1版本。现在看一下本例中的各个头部行。头部行Host:定存放所请求对象的主机。请求消息中包含头部Connection:close是在告知服务器本浏览器不想使用持久连接;服务器发出所请求的对象后应关闭连接。尽管产生这个请求消息的浏览器实现的是HTTP/1.1版本,它还是不想使用持久连接。User-agent头部行指定用户代理,也就是产生当前请求的浏览器的类型。本例的用户代理是Mozilla/4.0,它是Nelscape浏览器的一个版本。这个头部行很有用,因为服务器实际上可以给不同类型的用户代理发送同一个对象的不同版本(这些不同版本位用同一个URL寻址)。最后,Accept-languag:头部行指出要是所请求对象有简体中文版本,那么用户宁愿接收这个版本;如果没有这个语言版本,那么服务器应该发送其默认版本。Accept-languag:仅仅是HTTP的众多内容协商头部之一。一般格式中还有一个位于各个头部(及额外的回车符和换行符)之后的“附属体”(毗叮body)。附属体不在GET方法中使用,而是在POST方法中使用。POST方法适用于需由用户填写表单的场合,如往google搜索引擎中填入待搜索的词。用户提交表单后,浏览器就像用户点击了超链接那样仍然从服务器请求一个Web页面,不过该页面的具体内容却取决于用户填写在表单各个字段中的值。如果浏览器使用POST方法提出该请求,那么请求消息附属体中包含的是用户填写在表单各个字段中的值。与GET方法类似的是HEAD方法,两者的差别只是服务器在对HEAD方法的响应消息中去掉了所请求的对象,其他内容则与对GET方法的响应消息一样。HEAD方法通常用于HTTP服务器软件开发人员进行调试。HTTP响应消息下面是一个典型的HTTP响应消息:HTTP/1.1 200 0KConnectlon:closeDate: Thu, 13 Oct 2005 03:17:33 GMTServer: Apache/2.0.54 (Unix)LastNodified:Mon,22 Jun 1998 09;23;24 GMTContentLength:682lContentType:text/html(数据 数据 数据 数据 数据)这个响应消息分为3部分:1个起始的状态行(status line),6个头部行、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。本例的状态行表明,服务器使用HTTP/1.1版本,响应过程完全正常(也就是说服务器找到了所请求的对象,并正在发送)。现在看一下本例中的各个头部行。服务器使用Connectlon:close头部行告知客户自己将在发送完本消息后关闭TCP连接。Date:头部行指出服务器创建并发送本响应消息的日期和时间。注意,这并不是对象本身的创建时间或最后修改时间,而是服务器把该对象从其文件系统中取出,插入响应消息中发送出去的时间。Server:头部行指出本消息是由Apache服务器产生的;它与HTTP请求消息中的User-agent:头部行类似。LastNodified:头部行指出对象本身的创建或最后修改日期或时间。LastNodified:头部对于对象的高速缓存至关重要,且不论这种高速缓存是发生在本地客户主机上还是发生在网络高速缓存服务器主机(也就是代理服务器主机)上。ContentLength:头部行指出所发送对象的字节数。ContentType:头部行指出包含在附属体中的对象是HTML文本。对象的类型是由ContentType:头部而不是由文件扩展名正式指出的。注意,如果服务器收到一个HTTP/1.0的请求,那么它即使是一个HTTP/1.1服务器,也不会使用持久连接。相反,这样的HTTP/1.1服务器会在发出所请求的对象后关闭TCP连接。这么做是必要的,因为HTTP/1.0客户期待服务器马上关闭连接。我们接着看一下如下图所示的响应消息的一般格式。前面的响应消息例子完全符合这个格式。响应消息中的状态码和原因短语指示相应请求的处理结果200 0K;请求成功,所请求信息在响应消息中返回。301 Moved Permanently:所请求的对象己永久性迁移;新的URL在本响应消息的Location:头部指出。客户软件会自动请求这个新的URL。400 Bad Request;表示服务器无法理解相应请求的普通错误的状态码404 Not Found:服务器上不存在所请求的文档。HTTP Version Not Support:服务器不支持所请求的HTTP协议版本。你想如何看到一个真实的H1TP应答消息呢?这非常简单。可以使用nc工具连接到你喜欢的服务器(nc/netcat是一个黑客很喜欢用的工具,可以方便在主机之间建立TCP连接),然后输入一行请求消息,用来请求位于该服务器上的某个对象。例如,如果你可以输入以下指令:nc 80GET /index.shtmlHTTP/1.0(在输入第二行之后,敲两次回车),这就打开了一个到主机的端口80的TCP连接,然后发送HTTP GET命令。你应该能看到包含着YESKY主页的基本HTML文件的应苔消息。如果你想只看到HTTP消息行而不接收该对象本身,那么就把上面的GET换成HEAD。最后,看一下能得到什么样的应答消息。在这里我们讨论了大量能够在HTTP请求和应答消息中使用的头部行。HTTP规范(尤其是HTTP/1.1)定义了更多可以由浏览器、Web服务器和网络缓冲服务器插入的头部行。我们可以便用nc工具完全控制在请求消息中包含哪些头部,那么浏览器如何决定该在请求消息个包含哪些头部呢?Web服务器又是如何决定该在响应消息中包含哪些头部?浏览器是根据自己的用户代理类型、所支持的HTTP版本(HTTP/1.0版本的浏览器自然不会产生HTTP/1.1版本的头部)、用户对浏览器的配置(如所偏爱的语言)等因素生成请求消息中的各个头部的。web服务器有类似的情形:它们有不同的产品、版本和配置,所有这些因素都会影响在响应消息中包含哪些头部。本文讨论过的和即将讨论的用于HTTP请求消息和响应消息中的头部仅仅是很小的一部分,HTTP规范中定义了更多可用的头部,可以查阅相关的RFC文档进行更详细的了用户服务器交互身份认证和cookie我们已经知道HTTP服务器是无状态的。这样的处理可以简化服务器程序的设计,以便开发出更高性能的Web服务器软件。然而,一个Web站点往往有标识其用户的需求,因为其web服务器可能希望限制用户的访问,也可能想要根据用户的身份来提供内容。HTTP提供了两种帮助服务器标识用户的机制:身份认证和cookle。身份认证许多web站点要求用户提供一个用户名口令对才能访问存放在其服务器中的文档。这种要求称为身份认证(authentication)。HTTP提供特殊的状态码和头部来帮助Web站点执行身份认证。我们通过查看一个例子来领会这些特殊的状态码和头部如何工作。假设有个客户在请求来自某个服务器的一个对象,而该服务器要求用户授予权限。客户首先发送一个不合特殊头部的普通请求消息。服务器以空的附属体和一个“401Authorization Required”状态码作为响应。服务器还在这个响应消息中包含“个WWW-Authenticate:头部,说明具体如何执行身份认证。这个头部的典型值是指出用户需要提供一个用户名口令对。客户收到这个响应消息后提示用户输入用户名和口令,然后重新发送请求消息。这一回客户在请求消息中包含了一个Authorization:头部,其中包含有用户输入的用户名和口令。取得第一个对象后,客户在同为请求该服务器上对象的后续请求中继续发送这个用户名口令对。这个做法一般将持续到用户关闭浏览器为止。在浏览器未被关闭之前,这个用户名口令对是高速缓存着的,因此浏览器不会每请求一个对象就提示用户输入一次用户名和口令。通过上述方式,要求用户授权的Web站点就能标识出每个请求的用户了。我们需要知道,HTTP执行的是一种相当脆弱的身份认证方式,不难攻破。现代有很多更为安全的认证方式,我们会在以后介绍。cookie是一种可让Web站点用来跟踪用户的候选机制,定义在RFC 2109中。有些Web站点使用cookie,其他Web站点则不用。下面查看一个例子。假设一个客户首次联系一个使用cookie的web站点。服务器会在其响应中包含一个SetCoo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024-2030年中国金属家具行业市场全景分析及投资前景展望报告
- 心灵培训分享课件
- 谢彬培训课件
- 接待专员培训课件
- 社会热点事件在初中历史教学中的应用策略与实践研究
- 海洋调查设备项目风险评估报告
- 中国集成显卡行业市场深度分析及发展趋势预测报告
- 2025年 沧州市人民医院招聘考试笔试试题附答案
- 2025年中国全铜红冲三角阀行业市场发展前景及发展趋势与投资战略研究报告
- 2022-2027年中国瓜子行业市场供需现状及投资战略研究报告
- 医疗保险基本政策培训PPT
- 连云港师范高等专科学校辅导员考试题库
- 2023年湖北黄冈市检察机关招聘雇员制检察辅助人员50人高频考点题库(共500题含答案解析)模拟练习试卷
- 05G525-吊车轨道联结及车挡(适用于钢吊车梁)课件
- TQGCML 757-2023 硫酸钙晶须规程
- 计数型MSA分析表
- 军校招生政治考核表格式-双面打印
- 急救-毒蛇咬伤
- YY 0334-2002硅橡胶外科植入物通用要求
- GB/T 41261-2022过程工业报警系统管理
- (完整版)杭州电子科技大学数字电路期末考试试卷及答案
评论
0/150
提交评论