Web的应用层协议是超文本传输协议(HTTP)。
HTTP由两个程序实现:一个客户程序和一个服务器程序,它们通过交换报文进行对话,报文的结构和交换报文的方式由HTTP定义。
Web界面(文档)由对象组成,一个对象只是一个小文件,对象可通过一个URL地址寻址。HTML基本文件通过对象的URL地址引用页面中的其他对象。每个URL地址由两部分组成:存放对象的服务器主机名和对象的路径名。
例如,URL地址http://www.someSchool.edu/someDepartment/picture. gif其中的 www. someSchool. edu 就是主机名,/someDepartment/picture. gif 就 是路径名。
HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。HTTP客户首先发起一个与服务器的TCP连接,一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。客户向它的套接字接口发送HTTP请求报文并从它的套接字接口接收HTTP响应报文。类似地,服务器从它的套接字接口接收HTTP请求报文和向它的套接字接口发送HTTP响应报文。一旦客户向它的套接字接口发送了一个请求报文,该报文 就脱离了客户控制并进入TCP的控制。HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节。那是TCP以及协议栈较低层协议的工作。
服务器向客户发送被请求的文件,而不存储任何关于该客户 的状态信息。假如某个特定的客户在短短的几秒钟内两次请求同一个对象,服务器并不会 因为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象。HTTP服务器并不保存关于客户的任何信息,所以HTTP是一个无状态协议。
每个请求 /响应对是经一个单独的的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送呢?采用前一种方法.该应用程序被称为使用非持续连接(non-penirtent connection),采用后一种方法.该应用程序被称为使用持续连接(penirtent conneclion)。
1、客户进程发起TCP连接,客户和服务器上分别有一个套接字与该连接相关联。
2、HTTP客户经套接字向服务器发送HTTP请求报文
3、服务器经套接字接收请求报文并检索对象,在一个HTTP响应报文中封装对象,并通过该套接字向客户发送响应报文。
4、HTTP服务器进程通知TCP断开该TCP连接。
5、HTTP客户接收报文,TCP连接关闭
(每个TCP连接只传输一个请求报文和响应报文)
给出往返时间(Round-Trip Time, RTT)的定义.该 时间是指-个短分组从客户到服务器然后再返回客户所花费的时间。RTT包括分组传播时 延、分组在中间路由器和交换机上的排队时延以及分组处理时延。现在考虑当用户点击超链接时会发生什么现象。这渉及一次“三次握手”过程.即客户向服务器 发送一个小TCP报文段,服务器用一个小TCP报文段做出确认和响应.最后,客户向服务器返回确认。三次握手中前两个部分所耗费的时间占用了一个RTT。完成了三次握手的 前两个部分后.客户结合三次握手的第-:部分(确认)向该TCP连接发送一个HTTP请求 报文。一旦该请求报文到达服务器,服务閱就在该TCP连接上发送HTML文件。该HTTP 请求/响应用去了另一个RTT°因此,粗略地讲,总的响应时间就是两个RTT加上服务器 传输HTML文件的时间。
在采用持续连接的情况下.服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的 Web页面可以用单个持续TCP连接进行传送。更有甚者,位于同一台服务器的多个Web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行。可以一个接一个地发出对对象的这些请求,而不必等待对未决请求(流水线)的回答。一般来说,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接,HTTP的默认模式是使用带流水线的持续连接。
HTTP报文有两种:请求报文和响应报文。
HTTP请求报文的第一行叫做请求行(request line),其后继的行叫做首部行(header line)。请求行有3个字段:方法字段,URL字段和HTTP版本字段。方法字段可以取几种 不同的値,包括GET、POST、HEAD, PUT和DELETE。绝大部分的HTTP请求报文使用 GET方法。当浏览器请求一个对象时,使用GET方法,在URL字段带有请求对象的标识。(注:Internet上的每一个网页都具有一个唯一的名称标识,通常称之为URL(Uniform Resource Locator, 统一资源定位器)。它是www的统一资源定位标志,简单地说URL就是web地址,俗称“网址”。)
使用POST报文,.用户仍可以向服务器请求一个 Web页面,但Web页面的特定内容依赖于用户在表单字段中输入的内容。如果方法字段的值为POST时,则实体体中包含的就是用户在表单字段中的输入值。
HEAD方法类似于GET方法。当服务器收到使用HEAD方法的请求时.将会用一个 HTTP报文进行响应,但是并不返回请求对象。PUT方法常与Web发行工具联合使用,它允许用户上传对象到指定的Web服务器上指定的路径(目录)。PUT方法也被那些需要向Web服务器上传对象的应用程序使用。DELETE方法允许用户或者应用程序删除Web服务器上的对象。
状态行有3个字段:协议版本 字段,状态码和相应状态信息。
Connection:close首部行吿诉客户,发送完报文后 将关闭该TCP连接。
Date:首部行指示服务器产生并发送该响应报文的日期和时间。值得一提的是.这个时间不是指对象创建或者最后修改的时间;而是服务器从它的文件系统中检索到该对象,插入到响应报文,并发送响应报文的时间。
Server:首部行指示该报文哪个服务器产生的.它类似HTTP请求报文中的User-agent:首部行。
Last-Modified:首部行指示了对象创建或者最后修改的日期和时间。Last-Modified:首部行对既可能在本地客户也可能在网络缓存服务器上的对象緩存来说非常重要,我们将很快详细地讨论缓存服务器(也叫代理服务器)
Content-Length:首部行指示了被发送对象中的字数。
Content-Type:首部行指示实体体中的对象是XX文本(该对象类型应该正 式地由Conlenl-Type:首部行而不是用文件扩展名来指示。)
cookie技术有4个组件:
①在HTTP响应报文中的一个cookie首部行;
②在HTTP请求报文中的一个cookie首部行;
③在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理;
④位于Web站点的一个后端数据库。
过程
1、请求报文到达服务器,Web站点产生唯一识别码,并以此作为索引在他的后端数据库中产生一个表项。
2、服务器用一个包含Set-cookie:首部的HTTP响应报文对客户的浏览器进行响应。
3、浏览器受到HTTP响应报文,会看到Set-cookie:首部并在它管理的特定cookie文件中添加一行,该行包括服务器的主机名和在Set-cookie:首部中的识别码。
4、之后发往该服务器的每个HTTP请求都包括cookie:首部。
5、服务器可通过cookie在数据库中检索信息。
cookie可以标识一个客户
Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网 络实体。Web缓存器有自己的磁盘存储空间.并在存储空间中保存最近请求过的对象的副本。可以配置用户的浏览器,使得用户的所有HTTP 请求首先指向Web缓存器。一旦某浏览器被配置.每个对某对象的浏览器请求首先被定向到该Web缓存器。举例来说,假设浏览器正在请求对象http://www. someschool. edu/campus. gif,将会发生如下情况:
•浏览器建立一个到Web缓存器的TCP连接,并向Web緩存器中的对象发送一个 HTTP请求。
• Web缓存器进行检査,看看本地是否存储了该对象副本。如果有.Web缓存器就 向客户浏览器用HTTP响应报文返回该对象。
•如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器(如 www.someschool.edu)的TCP连接。Web缓存器则在这个缓存器到服务器的TCP 连接上发送一个对该对象的HTTP请求,在收到该请求后,初始服务器向该Web 缓存器发送具有该对象的HTTP响应。
•当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本(通过现有的客户浏览器和Web缓存器之间的 TCP连接).
Web缓存器可以大大减少对客户请求的响应时间,可以大大减少一个机构的接入链路到因特网的通信量。
总的响应时间,即从浏览器请求一个对象到接收到该对象为止的时间:是局域网时延、接入时延 (即两台路由器之间的时延)和因特网时延之和。从因特网接入链路一侧的路由器转发 HTTP请求报文(在一个IP数据报中)开始,到它收到其响应报文(通常在多个IP数据报中)为止的时间平均为2秒。我们非正式地将该持续时延 称为“因特网时延”(注:相关计算详解见课本75页)
尽管高速缓存能减少用户感受到的响应时间,但存放在缓存器中的对象副本可能是陈旧的。 换句话说,保存在服务器中的对象自该副本缓存在客户上以后可能已经被修改了。HTTP协议有一种机制,允许缓存器证实它的对象是最新的:这种机制就是条件 GET (conditional GET)方法。
如果:①请求报文使用GET方法;
②靖求报文中包 含一个“If-Modified・Since:”首部行。那么,这个HTTP请求报文就是一个条件GET请求报文。
GET方法:
1、代理缓存器向服务器发送请求报文
2、服务器向缓存器发送具有被请求对象的响应报文(Last-Modified:首部行)
3、缓存器再将对象转发到请求的浏览器的同时,也在本地的缓存了该对象,同时存储了最后修改日期。
4、一段时间后再次请求同一对象,对象仍在缓存器中,缓存器发送一个条件GET执行最新检查。
其中有If-Modified-Since:首部行的值与之前发送的响应报文中Last-Modified:首部行的值。该条件GET报文告诉服务器,仅当自指定日期之后该对象被修改过,才发送该对象。若未被修改过,服务器只报送响应报文,不发送对象。