【简记】Computer Networking——application layer(www part)
本part重点:
- 万维网www
- HTTP
6.4 万维网 WWW
6.4.1 万维网概述
万维网用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
万维网是分布式超媒体(hypermedia)系统。是互联网所提供的服务之一。
万维网的工作方式 :
- 万维网以客户-服务器方式工作。
- 浏览器就是在用户计算机上的万维网客户程序。万维网文档所驻留的计算机则运行服务器程序,因此这个计算机也称为万维网服务器。
- 在一个客户程序主窗口上显示出的万维网文档称为页面(page)。
万维网必须解决的问题 :
(1) 怎样标志分布在整个因特网上的万维网文档?
- 使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档。使每一个文档在整个因特网的范围内具有唯一的标识符 URL。
(2) 用何协议实现万维网上各种超链的链接?
- 在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是超文本传送协议 HTTP (HyperText Transfer Protocol)。 HTTP 是一个应用层协议,它使用 TCP 连接进行可靠的传送。
(3) 怎样使各种万维网文档都能在因特网上的各种计算机上显示出来,同时使用户清楚地知道在什么地方存在着超链?
- 超文本标记语言 HTML (HyperText Markup Language)使得万维网页面的设计者可以很方便地用一个超链从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。
(4) 怎样使用户能够很方便地找到所需的信息?
- 为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。
6.4.2 统一资源定位符 URL
1.URL的格式
URL 给资源的位置提供一种抽象的识别方法,并用这种方法给资源定位。
URL 相当于一个文件名在网络范围的扩展。
URL 的一般形式是:
使用 HTTP 的 URL:
HTTP的端口默认是80,通常是省略状态。
http://www.zju.edu.cn/c2505713/catalog.html
( zju.edu.cn 主机名部分)(c2505713/catalog.html ,路径,文件名是catalog.html)
6.4.3 超文本传送协议 HTTP
1.HTTP 的操作过程
从层次的角度看,HTTP 是面向事务的(transaction-oriented)应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
※ 用户点击鼠标后所发生的事件(简要版) :
(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
(3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接
(5) 浏览器发出取文件命令:
GET /chn/yxsz/index.htm。
(6) 服务器给出响应,把文件 index.htm 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。
HTTP 的主要特点 :
- HTTP采用TCP作为运输层连接,保证了数据的可靠传输
- HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
- HTTP 是面向事务的客户服务器协议。
- HTTP 1.0 协议是无状态的(stateless)。
(注意,万维网客户把HTTP请求报文作为三次握手的第三个报文,发送给了服务器)
请求一个万维网文档的时间: 2*RTT+文档传输时间
持续连接(persistent connection)
HTTP/1.1 协议使用持续连接。(1.0版本是非持续连接,下载时间长,缓存负担重)
万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。
这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。
持续连接的两种工作方式:
- 非流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT时间。但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。
- 流水线方式:客户在收到 HTTP的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率。
代理服务器(proxy server)
代理服务器(proxy server),它代表浏览器发出 HTTP 请求。
代理服务器的一种功能是增加缓冲器(Cache),提高访问速度。
高速缓存把最近的一些请求和响应暂存在本地磁盘中。当与暂时存放的请求相同的新请求到达时,万维网高速缓存就把暂存的响应发送出去,而不需要按 URL 的地址再去因特网访问该资源。
使用高速缓存的情况:
(1) 浏览器访问因特网的服务器时,要先与校园网的代理服务器建立 TCP 连接,并向高速缓存发出 HTTP 请求报文
(2) 若代理服务器已经存放了所请求的对象,则将此对象放入 HTTP 响应报文中返回给浏览器。
(3) 否则,代理服务器就代表发出请求的用户浏览器,与因特网上的源点服务器建立 TCP 连接,并发送 HTTP 请求报文。
(4) 源点服务器将所请求的对象放在 HTTP 响应报文中返回给校园网的代理服务器。
(5) 代理服务器收到此对象后,先复制在其本地存储器中(为今后使用),然后再将该对象放在 HTTP 响应报文中,通过已建立的 TCP 连接,返回给请求该对象的浏览器。
3.HTTP 的报文结构
HTTP 有两类报文:
请求报文——从客户向服务器发送请求报文。
响应报文——从服务器到客户的回答。
由于 HTTP 是面向正文的(text-oriented),因此在报文中的每一个字段都是一些 ASCII 码串,因而每个字段的长度都是不确定的。
“方法”是面向对象技术中使用的专门名词。所谓“方法”就是对所请求的对象进行的操作,这些方法实际上也就是一些命令。因此,请求报文的类型是由它所采用的方法决定的。
“URL”是所请求的资源的 URL。
“版本”是 HTTP 的版本。
方法(操作) | 意义 |
---|---|
OPTION | 请求一些选项的信息 |
GET | 请求读取由 URL所标志的信息 |
HEAD | 请求读取由 URL所标志的信息的首部 |
POST | 给服务器添加信息(例如,注释) |
PUT | 在指明的 URL下存储一个文档 |
DELETE | 删除指明的 URL所标志的资源 |
TRACE | 用来进行环回测试的请求报文 |
CONNECT | 用于代理服务器 |
状态码都是三位数字
1xx 表示通知信息的,如请求收到了或正在进行处理。
2xx 表示成功,如接受或知道了。
3xx 表示重定向,表示要完成请求还必须采取进一步的行动。
4xx 表示客户的差错,如请求中有错误的语法或不能完成。
5xx 表示服务器的差错,如服务器失效无法完成请求。
4.在服务器上存放用户的信息
Cookie机制则是在客户端保持状态的方案。
使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。
以购物网站为例:
(1)当使用电脑A访问启用Cookie的网站时,网站给该用户一个唯一的识别码,并以此为索引在后端生成数据库产生一个项目。在给客户端的HTTP响应报文中添加一个叫Set-cookie的首部行。
(2)客户端的浏览器在收到报文后,在它管理的特定Cookie中添加一行,其中包括这个服务器的主机名和Cookie号,当再次访问该网站(服务器)时,也在请求报文的首部行添加Cookie信息。
(3)这样,网站就能跟踪到该用户在该网站的活动。
这里面的问题就来了,也是很多人都会问的问题,ebay如何确定同一电脑登陆了多个账号,以及同一账号登陆过多台电脑?
作为一个做网络准入产品的人,俺一直对这个比较感兴趣,当然,网上也有很多的说法,先来一一分析一下:
说法一:是通过IP地址定位的,如果两个账号用的同一个IP地址,那么就算在一台电脑上登陆了。
分析:如果你是搞网络的,应该就笑了,当前IPv4资源几乎耗尽,很多人上网用的都是通过网络地址转换,用的同一个IP地址,例如我们家采用的就是小区宽带,分给我们的IP就是个私网IP,可以说整个小区几百户人,估计对外就是几个公网IP地址,如果是通过IP地址来确定用户,那估计要伤及无数无辜了。
说法二:是通过网卡地址(MAC地址)定位的,同一台电脑用的就是同一块网卡,所以可以定位。
分析:同样,如果你是搞网络的,应该又笑了。MAC地址是一个二层协议地址(IP地址是三层协议地址),既然是二层协议,那么它就无法跨越三层,但从你的电脑,到ebay的服务器,中间要经历无数个路由器、防火墙等等三层或三层以上的设备,你的mac地址早就在第一次经过三层设备(很可能是你家的无线路由器)的时候就丢弃了,又怎么可能传到ebay那里?
说法三:是通过硬盘序号、主板序号等等主机唯一的标识信息来定位的。
分析:呵呵,这个是俺的专长,我可以负责任的告诉你,我们在使用ebay的时候,没有安装任何的客户端软件,甚至连个activeX控件都没装过,那么也就意味着是读不出这些东西的,这些硬件的序号,是需要专门的程序通过读取一些驱动层的信息方可获取,仅仅是我们的浏览器,是读不出来的,更不用说传给ebay了。
以上几个常见的说法都被否定了,那么是什么东西泄漏了我们的身份给ebay呢?还是要从浏览器下手,因为,我们跟ebay唯一的交互,就是浏览器,而没有其他的应用程序,那么浏览器里什么能记录我们的个人信息?Cookies、session等等都可以。其实,ebay已经在自己的官网上面宣布了结果——浏览器cookies和Flash Cookies
6.4.4 万维网文档
1.超文本标记语言 HTML
HTML 把各种标签嵌入到万维网的页面中。这样就构成了所谓的 HTML 文档。HTML 文档是一种可以用任何文本编辑器创建的 ASCII 码文件。
XML:可扩展标记语言
CSS:层叠样式表
2.动态万维网文档
静态文档是指该文档创作完毕后就存放在万维网服务器中,在被用户浏览的过程中,内容不会改变。
动态文档是指文档的内容是在浏览器访问万维网服务器时才由应用程序动态创建。
动态文档和静态文档之间的主要差别体现在服务器一端。这主要是文档内容的生成方法不同。而从浏览器的角度看,这两种文档并没有区别。
万维网服务器功能的扩充 :
(1) 应增加另一个应用程序,用来处理浏览器发来的数据,并创建动态文档。
(2) 应增加一个机制,用来使万维网服务器把浏览器发来的数据传送给这个应用程序,然后万维网服务器能够解释这个应用程序的输出,并向浏览器返回 HTML 文档。
通用网关接口 CGI(Common Gateway Interface) :
CGI 是一种标准,它定义了动态文档应如何创建,输入数据应如何提供给应用程序,以及输出结果应如何使用。
万维网服务器与 CGI 的通信遵循 CGI 标准。
“通用”:CGI 标准所定义的规则对其他任何语言都是通用的。
“网关”:CGI 程序的作用像网关。
“接口”:有一些已定义好的变量和调用等可供其他 CGI 程序使用。
CGI 程序的正式名字是 CGI 脚本(script)。
3.活动万维网文档
运行 Java 的浏览器需要有 HTML 解释程序和 Java 小应用程序解释程序。
6.4.5 万维网的信息检索系统
1.全文搜索引擎
全文检索搜索引擎是一种纯技术型的检索工具。它的工作原理是通过搜索软件(爬虫类程序)到因特网上的各网站收集信息,找到一个网站后可以从这个网站再链接到另一个网站。然后按照一定的规则建立一个很大的在线数据库供用户查询。
用户在查询时只要输入关键词,就从已经建立的索引数据库上进行查询(并不是实时地在因特网上检索到的信息)。
2.分类目录搜索引擎
分类目录搜索引擎并不采集网站的任何信息,而是利用各网站向搜索引擎提交的网站信息时填写的关键词和网站描述等信息,经过人工审核编辑后,如果认为符合网站登录的条件,则输入到分类目录的数据库中,供网上用户查询。
分类目录搜索也叫做分类网站搜索。