本关任务: 分析网页中嵌入对象的请求与响应的具体过程。
为了完成本关任务,你需要掌握:
在制作网页时,除了可以在网页中放置文本外,还可以在页面中嵌入图片、声音、视频、动画等多媒体内容,使得页面看上去更加丰富多彩、动感十足。 在网页中嵌入对象,实际上并不会在网页中插入对象,而是通过某种标签链接到指定的对象,标签创建的只是被引用对象的占位符而已。 嵌入图像: 浏览器将图像显示在文档中图像标签出现的地方。URL 指存储图像的位置。URL 可以使用完整的位置,如:
也可以使用相对位置如:
表示图片文件
flower.jpg
位于当前页面所处的服务器位置上面。
嵌入声音: 在早期的 HTML 标准中,嵌入声音:
在 HTML5 标准中,还可以嵌入音频和视频对象。如:
您的浏览器不支持 audio 元素。
嵌入 flash 对象:
在客户端请求有嵌入对象的网页时,除开要对请求的页面文件进行响应之外,还需要对网页中嵌入的每个对象进行发起请求。对嵌入对象的请求可以采用串行方式或并行方式。 串行方式 假设一个包含了 3 个嵌入图片的 WEB 页面,浏览器需要发起 4 个 HTTP GET 请求来显示此页面:1 个用于顶层的 HTML 页面,3 个用于嵌入的图片。浏览器可以先完整地请求原始的 HTML 页面,然后请求第一个嵌入对象,然后请求第二个嵌入对象等,以这种简单的方式对每个嵌入对象串行处理。如图所示:
并行方式 串行方式的处理效率非常低。HTTP 允许客户端打开多条连接,并行地执行多个 HTTP GET 请求,并行加载了 4 幅嵌入式图片,每个事务都有自己的 TCP 连接。如图所示:
并行连接的时间线,比单条连接快很多。首先要装载的是封闭的 HTML 页面,然后并行处理其他的 3 个事务,每个事务都有自己的连接。图片中的装载是并行的,连接的时延也是重叠的。
从理论上说,并行连接的速度可能会更快。但实际上不一定总是更快的。客户端的网络带宽不足时,大部分的时间可能都是用来传送数据的。在这种情况下,一个连接到速度较快服务器上的 HTTP 事务就会很容易地耗尽所有可用的 Modem 带宽。如果并行加载,每个对象可能会去竞争有限的带宽,每个对象都会以较慢的速度按比例加载,这样带来的性能提升就很小,甚至没有提升。
另外,打开大量连接会消耗很多内存资源,从而引发自身的性能问题。复杂的 WEB 页面可能会有数十或数百个内嵌对象。客户端可能可以打开数百个连接,但服务器通常要同时处理很多其他用户的请求,所以很少有 WEB 服务器希望出现这样的情况。这会造成服务器性能的严重下降,对高负荷的代理来说也同样如此。
实际上,浏览器使用并行连接时,会将并行连接的总数限制在一个较小的值。服务器可以随意关闭来自特定客户端的超量连接。
WEB 客户端经常会打开到同一个站点的连接。一个 WEB 页面上的大部分内嵌图片通常都来自同一个 WEB 站点,而且相当一部分指向对象的超链接通常都指向同一个站点。因此,初始化了对某服务器 HTTP 请求的应用程序很可能会在不久的将来对那台服务器发起更多的请求,这种性质被称为站点本地服务(site locality)。
HTTP/1.1 允许 HTTP 设备在事务处理结束之后将 TCP 连接保持在打开状态,以便为未来的 HTTP 请求重用现存的连接。在事务处理结束之后,仍然保持在打开状态的 TCP 连接被称为持久连接。非持久连接会在每个事务结束之后关闭。持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。
重用已对目标服务器打开的空闲持久连接,就可以避开缓慢的链接建立阶段。而且已经打开的链接还可以避免慢启动的拥塞适应阶段,以便更快速地进行数据传输。
持久连接与并行连接配合使用可能是最高效的方式。现在,很多 WEB 应用程序都会打开少量的并行连接,其中的每一个都是持久连接。持久连接有两种类型:比较老的 HTTP/1.0+"keep-alive" 连接,以及现代的 HTTP/1.1“persistent” 连接。 KEEP-alive
上图对串行连接实现 4 个 HTTP 事务的时间与在一条持久连接上实现同样事务所需的时间线进行了比较,由于去除了进行连接和关闭连接的开销,所以时间线有所缩减。
很多 HTTP/1.0 浏览器和服务器支持 keep-alive 连接。但由于受到一些互操作性设计的困扰, HTTP/1.1 逐渐停止了对 keep-alive 连接的支持,用持久连接(persistent connection)的改进型设计取代了它。持久连接的目的与 keep-alive 了解的目的相同,但工作机制更优。
与 HTTP/1.0 的 keep-alive 连接不同,HTTP/1.1 持久连接在默认情况下是激活的。除非特别指明,否则 HTTP/1.1 假定所有连接都是持久的。要在事务处理结束之后将连接关闭,HTTP/1.1 应用程序必须向报文中显示地添加一个 Connection:close 首部。
HTTP/1.1 客户端假定在收到响应后,除非响应中包含了 Connection:close 首部,不然 HTTP/1.1 连接就仍维持在打开状态。但是,客户端和服务器仍然可以随时关闭空闲的连接。不发送 Connection:close ,并不意味着服务器承诺永远将连接保持在打开状态。
双击打开桌面上的工作区文件夹”workspace”,再打开实训文件夹”myshixun”,将查询的信息保存到文件message-4.txt
。具体要求如下:
(1)打开 Wireshark ,加载实训文件夹中的http-ethereal-trace-4
文件并筛选出其中的 HTTP 报文;
(2)查看浏览器发送 HTTP GET 请求消息的条数,写入文件;
(3)查看请求目标网页的 IP 地址,写入文件;
(4)查看请求嵌入图片对象cover.jpg
的 IP 地址,写入文件;
(5)浏览器从网站上下载两个嵌入图片采用方式(串行/并行),写入文件;
(6)查看请求图片cover.jpg
的 GET 请求中 connection 字段的值,将其写入文件中;
message-4.txt