1 URL
统一资源定位符(URL)是资源标识符最常见的格式。大部分的URL都遵循一种标准格式,这种格式包含三个部分。
- URL的第一部分:方案(scheme),说明了访问资源所使用的协议类型。通常是HTTP协议(http://)
- 第二部分是服务器的因特网地址(比如,www.baidu.com)
- 其余部分指定了Web服务器上的某个资源(比如,/user/user.jpg)
几乎所有的URI都是URL。
2 事务
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)的格式化数据进行的,如下图:
2.1 方法
HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP method)。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个Web页面、运行一个网关程序、删除一个文件等)。下图列出了五种常见的HTTP方法。
2.2 状态码
每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。下图显示了几种常见的状态码。
3 报文
HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以方便地对其进行读写。下图显示了一个简单事务所使用的HTTP报文。
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message)。
HTTP报文包括以下三个部分。
- 起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
- 首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
- 主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制(比如图片、视频、音轨、软件程序)。当然,主体中也可以包含文本。
下图显示了一个简单事务的HTTP报文。
4 连接
4.1 TCP/IP
HTTP是个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP
TCP提供了:
- 无差错的数据传输
- 按序传输(数据总是会按照发送的顺序到达)
- 未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
只要建立了TCP连接,客户端和服务器之间的报文交换就不会丢失、不会被破坏,也不会在接收时出现错序了。
HTTP协议位于TCP的上层。HTTP使用TCP来传输其报文数据。TCP则位于IP的上层。
4.2 连接、IP地址及端口号
在HTTP客户端向服务器发送报文之前,需要使用网际协议(Internet Protocol,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
建立一条TCP连接的过程与给公司办公室的某个人打电话的过程类似。首先,要拨打公司的电话号码。其次,拨打要联系的人的分机号。
在TCP通过URL获得服务器的IP地址,以及与服务器上运行的特定软件相关的TCP端口号。
下图显示了几个URL:
有了IP地址和端口号,客户端就可以很方便地通过TCP/IP进行通信了。下图显示了浏览器怎样通过HTTP显示位于远端服务器中的某个简单HTML资源的。
步骤如下:
(a)浏览器从URL中解析出服务器的主机名
(b)浏览器将服务器的主机名转换成服务器的IP地址
(c)浏览器将端口号(如果有)从URL中解析出来
(d)浏览器建立一条与Web服务器的TCP连接
(e)浏览器向服务器发送一条HTTP请求报文
(f)服务器向浏览器回送一条HTTP响应报文
(e)关闭连接,浏览器显示文档
5 Web的结构组件
5.1 代理
代理是Web安全、应用集成以及性能优化的重要组成模块。
代理位于客户端和服务器之间,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代理,代表用户访问服务器。
出于安全考虑,通常会将代理作为转发所有Web流量的可信任中间节点使用。代理还可以对请求和响应进行过滤。比如,在企业中对下载的应用程序进行病毒检测,或者对小学生屏蔽一些成人才能看的内容。
5.2 缓存
Web缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文档复制保存起来。下一个请求同一文档的客户端就可以享受缓存的私有副本所提供的服务了。
客户端从附近的缓存下载文档会比从远程Web服务器下载快得多。HTTP定义了很多功能,使得缓存更加高效,并规范了文档的新鲜度和缓存内容的隐私性。
5.3 网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他的协议。网关接受请求时就好像自己是资源的源端服务器一样。客户端可能并不知道自己正在与一个网关进行通信。
5.4 Agent代理
用户Agent代理(简称Agent代理)是代表用户发起HTTP请求的客户端程序。所有发布Web请求的应用程序都是HTTP Agent代理。到目前为止,我们只提到过一种HTTP Agent代理:Web浏览器,但用户Agent代理还有很多其他类型。