第七节 万维网WWW
万维网(World wide Web)
——是一种特殊的结构框架,目的是为了访问因特网数以千计机器上的链接文件。
起源:1989年欧洲粒子物理研究室CERN。
CERN的物理学家Tim Berners-Lee于1989年3月提出链接文档的万维网的最初计划。
1994年,CERN和麻省理工学院签订协议建立万维网集团,致力于进一步发展信息网、标准化协议并鼓励站点间的互操作性。
7.7.1 Web结构的组成
Web页:Web上的很大的文档,可通过Internet访问。
每个Web页被归类为一个超媒体(hypermedia)文档!
后缀media指文档,还可以包含除文本以外的其他项(如图形图像);
前缀hyper指文档,可以包含指向只他相关文档的可选择链接(selectable link)。
在Internet上实现Web使用的两个主要构造模块:
Web浏览器(Web Browser):由一个应用程序组成,用户调用该程序访问和显示Web页。
Web服务器(Web Server):浏览器变成客户联络适当的Web服务器,得到指定页的副本,因为给定的服务器可以管理多个Web页,所以在请求时浏览器必须指定准确的页。
用于Web页的数据表示标准取决于Web页的内容!
例如,标准的图形表示:可交换的图像文件格式(GIF)、联合图像专家组(JPEG)、包含文本以及其他项的页面超文本标记语言(HTML)。
HTML文档:又由文本以及内嵌命令的文件组成。
内嵌命令:又称标记(tag),指导显示的方式,用于小于号(<)和大于号(>)括起来,一些标记成对使用,可以对成对标记之间的所有各项都产生作用。
例如,<CENTER>和</CENTER>使标记内的各项位于浏览器窗口的中心。
每个Web页都被分配了一个唯一的名称,用来标识该页!
统一资源定位器URL(Uniform Resource Locator):用来标识Web页的名称,以用来访问条目的指定方案(scheme)作为起始。
方案指定了传输协议,URL其余部分的格式则依赖于方案。
例如,在http方案后面的URL有以下形式:
http://hostname[:port]/path[;parameters][query]
方括号,代表可选项;
hostname字符串,指定作为服务器的那台计算机的域名或IP地址;
port,是可选的协议端口号,仅在服务器不使用熟知端口(80)的情况下才使用;
path,是标识服务器上某个文档的字符串;
parameters,是可选的字符串,指定由客户提供的可选参数;
?Query,是当浏览器发送询问时使用的可选字符串。
用户未必能直接看到或使用可选部分,用户输入的URL只包含hostname和path!
例如: http://www.jlu.edu.cn
所有的Web访问以URL开始:
用户或者通过键盘输入URL,或者选择一项给浏览器提供URL的条目;
浏览器提取规范方案,然后使用方案确定如何分析URL的剩余部分;
浏览器分析URL,提取信息,使用它得到请求页的副本。
举例说明如何从文档的可选择链接产生URL:
文档为每个链接包含一对值:显示在屏幕上的条目、以及用户选择该条目后的URL。
锚(anchor):HTML中的<A>和</A>标记对,用于定义链接。
将URL添加给第一个标记,要显示的各项放在两个标记之间;浏览器在内部存储URL,当用户选定链接时浏览器则转到这个URL。
例如,下面的HTML文档中包含可选择链接:
<HTML>
The author of this txt is
<A HREF=http://www.jlu.edu.cn/index0.html>
JiLin University.</A>
</HTML>
当文档显示时,在屏幕上出现一行文本:The author of this texts is JiLin University.
浏览器在 JiLin University.下加了下划线,指示它对应于可选择链接。
浏览器在内部存储<A>中的URL,当用户选定链接时浏览器转到该URL。
支持中介(support For Intermediaries),HTTP允许在浏览器到服务器之间路径上的机器作为代理服务器,将Web页放入高速缓存并从中应答浏览器的请求。
7.7.2 Web交互
1.HTTP GET请求
在最简单情况下,浏览器直接联络Web服务器,发送HTTP GET命令从服务器得到Web页!
浏览器以URL开始,提取出主机名部分
|
使用DNS把主机名映射成相应的IP地址
|
然后使用IP地址形成到服务器的TCP连接
|
形成TCP连接后,浏览器和Web服务器就使用HTTP进行通信
(浏览器发送HTTP GET命令,请求得到特定的页面;服务器发送页面的副本,进行响应)
HTTP GET请求:由一行以关键字GET开头的文本组成,然后是URL以及HTTP版本号。
例如,要从服务器www.jlu.edu.cn得到前例中的Web页,浏览器可以发送下面的请求:
绝对URL: GET http://www.jlu.edu.cn/index0.html/HTTP/1.1
相对URL(形成TCP连接后): GET/ index0.html/HTTP/1.1
2.错误消息
在大多数情况下,当Web服务器接收到由浏览器发送的非法请求时,经常在有效的HTML中生成错误消息,然后浏览器试图显示服务器返回的任何内容。
例如,一个服务器生成了以下错误消息:
<HTML>
<HEAD><TITLE>400 Bad Request</TITLE>
</HEAD>
<BODY>
<H1>Bad Request</H1>Your browser sent a request that this server could not understand.
</BODY>
</HTML>
浏览器在内部使用文档的“首部”,只向用户显示“正文”。
<H>和</H>使浏览器把Bad Request作为标题显示出来(也就是大写并粗体显示)。
结果在用户的屏幕上得到两行输出结果:
Bad Request
Your browser sent a request that this server could not understand。
3.持久连接和长度
HTTP的早期版本通过为每个数据传输使用新的TCP连接,遵循和FTP一样的模式。
客户打开TCP连接,发送GET请求服务器传送请求项目的副本,然后关闭TCP连接客户一直从TCP连接读取数据,直到遇到文件末尾为止最后,客户关闭连接。
1999年6月的版本1.1从根本上改变了基本HTTP模式,不再为每个传输使用TCP连接,把持久连接(persistent connection)用作默认方法。
客户打开和特定服务器的TCP连接客户就让该连接在多个请求和响应过程中一直存在当客户或服务器准备关闭连接时,则通知另一端,然后关闭该连接。
持久连接的主要优点:减少开销,TCP连接越少,意味着响应时间、底层网络上系统开销、缓冲区使用的内存和使用的CPU时间就会更少,可以用流水线技术请求进一步优化使用持久连接的浏览器(也就是逐个连续地发送请求,不必等待响应)。
持久连接的主要缺点:需要标识通过连接发送的每一项的开头和结尾。
处理这种情况有两种可能的技术:
先发送长度,然后再发送数据项(HTTP使用这种技术);
在数据项后面发送一个标记值,标记数据项的结束(HTTP不能预先约定标记值,因为传送的数据项包括图形图像,图像可以包含任意的八位组序列)。
4.数据长度和程序输出
服务器使用公共网关接口机制,在发送之前不能知道数据项的长度!
公共网关接口CGI机制:允许计算机程序在服务器上运行并动态创建Web页,当到达的请示是针对CGI生成的页面时,服务器运行适当的CGI程序进行响应,从程序端向客户发送输出。
允许动态Web页产生时创建当前信息,意味着服务器不能提前知道准确的数据大小!
为了提供动态Web页,HTTP标准指定:如果服务器预先不知道数据项的长度可以通知浏览器,浏览器将在传送完项目后关闭连接!
5.长度编码和首部
HTTP借用电子邮件的基本格式,服务器使用822格式和MIME扩展格式表示长度信息:每个HTTP传送包含一个首部、一个空行和要发送的数据项,首都中的每一行包含关键字、冒号和信息。
例1,下面首部显示了通过持久TCP连接传输HTML文档时使用的几个首部。
Content-length:34
Content-language:en
Content-Encoding:ascii
<HTML> A trivial example.</HTML>
带首部行的HTTP传输!用于指定属性、空行和文档本身。
如果是持久连接,需要给出Content-Length首部。
例2,如果服务器不知道数据项的长度,在发送完数据项后关闭连接,但服务器不会没有进行警告就行动,会通知浏览器,希望关闭连接。
服务器在数据项之前包含一个connection首部以代替Content-Length首部:
Connection:close
浏览器接收到连接首部后,知道服务器要在传送后关闭连接,禁止继续发送请求。
6.协商
HTTP可使用首部允许客户和服务器协商(negotiate)各种能力!
可协商的一系列能力包括:各种有关连接(例如,访问是否已通过鉴别)、表示法(例如,是否接受jpeg格式的图形图像或使用哪种类型的压缩格式)、内容(例如,文本文件是否必须是英文)以及控制(例如,页面保持有效的时间长度)等方面的特征。
两种类型的协商:
服务器驱动(server driven):浏览器发出请求请求指定首选列表以及要求的数据项的URL服务器从可用的表示法中选出符合浏览器首选要求的一项,如果有多项符合条件则进行“最好的猜测”。
代理驱动(agent driven):也就是浏览器驱动。
浏览器用两步过程执行选择操作:
首先,浏览器向服务器发送请求询问可用的内容,服务器返回可能的内容列表;
然后,浏览器选择其中一个可能项,发送第二个请求获得该数据项。
缺点:要求两个服务器互相作用。
优点:浏览器得到了对选项的完全控制权。
7.条件请求
条件请求:HTTP允许发送方有条件地进行请求,即当浏览器发送请求时,其包括的首部限定了在何种条件下应该兑现请求,如果不符合指定的条件,则服务器不返回请求的数据项。
条件请求通过避免不必要的传输,允许浏览器优化检索过程!
If-Modified-Since请求:指定一个最简单的条件,允许浏览器避免传输数据项,除非数据项从指定的日期以来已经更新。
例如,浏览器的GET请求可以包括首部:
If-Modified-Since:Sat,01 Jan 2003 05:00:01 GMT
如果数据项比2003年1月1日还要早,则不进行传输。
8.支持代理服务器
代理服务器:是Web结构的一个重要部分,提供了优化机制,能够降低等待时间并减少服务器的负担;但不是透明的,必须配置浏览器联络本地代理,而不是与初始源服务器联络,必须配置该代理服务器以便能够高速缓存Web页的副本。
HTTP协议支持代理服务器,准确地指定:代理服务器如何处理每个请求、代理服务器如何解释首部、浏览器如何与代理服务器协商、代理服务器如何与服务器协商。
几个专门用于代理服务器的HTTP首部!
例如:有一个首部允许代理服务器鉴别自己是否有权访问某服务器;另一个首部允许每个代理服务器处理一个数据项,以记录其身份,这样最终的接收者就可以接收所有中介代理服务器的列表;
HTTP允许服务器控制代理服务器如何处理每个Web页。
例如,服务器可以在响应中包括Max-Forwards首部,以限制在交付给浏览器之前,处理数据项的代理服务器的数目。
若服务器指定代理服务器数为1(即Max-Forwards=l),则最多只有一个代理服务器可以处理沿着服务器到浏览器路径上的数据项;为0时禁止任何代理服务器处理数据项。
9.高速缓存
目的:提高效率,通过消除不必要的传输,减少等待时间和工作量。
特点:是存储,在最初访问Web页时,由浏览器或中介代理服务器或这两者把副本存储在磁盘上,以后请求同一页时可以从高速缓存而不是从服务器上得到Web页的副本,从而缩短查找过程。
所有高速缓存方案中的主要问题和时限有关!
保留在高速缓存的副本:
时间太长使副本变得陈旧,意味着对初始页的改动没有反映在高速缓存的副本中;
时间不够长效率就会降低,因为下一个请求必须返回给服务器。
HTTP允许服务器以两种方式控制高速缓存:
首先,当HTTP应答对Web页的请求时,服务器可以指定高速缓存的细节,包括:该页能否全部缓存、代理服务器是否可以高速缓存该页、哪些人可以共享高速缓存的页面、高速缓存的副本的到期时间、可应用于副本的传输的限制。
其次,HTTP允许浏览器强制Web页重新生效,浏览器发送对该页的请求,使用首部指定最长的“寿命”(也就是自从存储Web页的副本以来的时间)不能大于0,这样,只有初始服务器将应答该请求。

|