1.1 HTTP——因特网的多媒体信使
HTTP使用的是可靠的数据传输协议,因此即使数据来自地球的另一端,它也能够确保数据在传输的过程中不会被损坏或产生混乱。
1.2 Web客户端和服务器
1.3 资源
Web服务器是Web资源的宿主。Web资源是Web内容的源头。最简单的Web资源就是Web服务器文件系统中的静态文件。这些文件可以包含任意内容:文本文件、HTML文件、Word、JPEG、AVI文件,或所有其他你能够想到的格式。
但资源不一定非得是静态文件。资源还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份、所请求的信息或每天的不同时段来产生内容。
1.3.1 媒体类型
因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都搭上了名为MIME类型(MIME type)的数据格式标签。最初设计MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)是为了解决在不同的电子邮件系统之间搬移报文时存在的问题。MIME在电子邮件系统中工作得非常好,因此HTTP也采纳了它,用它来描述并标记多媒体内容。
MIME类型是一种文本标记,标识一种主要的对象类型和一个特定的子类型,中间由一条斜杠来分隔。
1.3.2 URI
服务器资源名被称为统一资源标识符(Uniform Resource Identifier,URI)。URI就像因特网上的邮政地址一样,在世界范围内唯一标识并定位信息资源。URI有两种形式,分别称为URL和URN。
1.3.3 URL
统一资源定位符(URL)是资源标识符最常见的形式。
大部分URL都遵循一种标准格式,这种格式包含三个部分。
①URL的第一部分被称为方案(scheme),说明了访问资源所使用的协议类型。这部分通常就是HTTP协议(http://)。
②第二部分给出了服务器的因特网地址(比如,www.joes-hardware.com)
③其余部分指定了Web服务器上的某个资源(比如,/specials/saw-blade.gif)
1.3.4 URN
URI的第二种形式就是统一资源名(URN)。URN是作为特定内容的唯一名称使用的,与目前的资源所在地无关。使用这些与位置无关的URN,就可以将资源四处搬移。通过URN,还可以用同一个名字通过多种网络访问协议来访问资源。
1.4 事务
一个HTTP事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为HTTP报文(HTTP message)的格式化数据块进行的
1.4.1 方法
HTTP支持几种不同的请求命令,这些命令被称为HTTP方法(HTTP Method)。每条HTTP请求报文都包含一个方法。这个方法会告诉服务器要执行什么动作(获取一个Web页面、运行一个网关程序、删除一个文件等)。
1.4.2 状态码
每条HTTP响应报文返回时都会携带一个状态码。状态码是一个三位数的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
1.4.3 Web页面中可以包含多个对象
应用程序完成一项任务时通常会发布多个HTTP事务。比如,Web浏览器会发布一系列HTTP事务来获取并显示一个包含了丰富图片的Web页面。
1.5 报文
HTTP报文是由一行一行的简单字符串组成的。HTTP报文都是纯文本,不是二进制代码,所以人们可以很方便地对其进行读写。
从Web客户端发往Web服务器的HTTP报文称为请求报文(request message)。从服务器发往客户端的报文称为响应报文(response message),此外没有其他类型的HTTP报文。
HTTP报文包括以下三个部分。
①起始行
报文的第一行就是起始行,在请求报文中用来说明要做些什么,在响应报文中说明出现了什么情况。
②首部字段
起始行后面有零个或多个首部字段。每个首部字段都包含一个名字和一个值,为了便于解析,两者之间用冒号(:)来分隔。首部以一个空行结束。添加一个首部字段和添加新行一样简单。
③主体
空行之后就是可选的报文主体了,其中包含了所有类型的数据。请求主体中包括了要发送给Web服务器的数据;响应主体中装载了要返回给客户端的数据。起始行和首部都是文本形式且都是结构化的,而主体则不同,主体中可以包含任意的二进制数据(比如图片、视频、音频、软件程序)。当然,主体中也可以包括文本。
1.6 连接
1.6.1 TCP/IP
HTTP是个应用层协议。HTTP无需操心网络通信的具体细节;它把联网的细节都交给了通用、可靠的因特网传输协议TCP/IP。
TCP提供了:
1.无差错的数据传输
2.按序传输(数据总是会按照发送的顺序到达)
3.未分段的数据流(可以在任意时刻以任意尺寸将数据发送出去)
1.6.2 连接、IP地址及端口号
在HTTP客户端向服务器发送报文之前,需要用网际协议(Internet Protocal,IP)地址和端口号在客户端和服务器之间建立一条TCP/IP连接。
建立一条TCP连接的过程与给公司办公室的某个人打电话的过程类似。首先,要拨打公司的电话号码。这样就能进入正确的机构了。其次,拨打要联系的那个人的分机号。
步骤如下:
(a)浏览器从URL中解析出服务器的主机名
(b)浏览器将服务器的主机名转换成服务器的IP地址
(c)浏览器将端口号(如果有的话)从URL中解析出来
(d)浏览器建立一条与Web服务器的TCP连接
(e)浏览器向服务器发送一条HTTP请求报文
(f)服务器向浏览器会送一条HTTP响应报文
(g)关闭连接,浏览器显示文档
1.7 协议版本
1.HTTP/0.9
2.HTTP/1.0
3.HTTP/1.1
4.HTTP-NG(HTTP/2.0)
1.8 Web的结构组件
1.8.1 代理
位于客户端和服务器之间的HTTP中间实体,接收所有客户端的HTTP请求,并将这些请求转发给服务器(可能会对请求进行修改之后转发)。对用户来说,这些应用程序就是一个代码,代表用户访问服务器。
1.8.2 缓存
Web缓存(Web cache)或代理缓存(proxy cache)是一种特殊的HTTP代理服务器,可以将经过代理传送的日常文档复制保存起来。
1.8.3 网关
网关(gateway)是一种特殊的服务器,作为其他服务器的中间实体使用。通常用于将HTTP流量转换成其他协议。
1.8.4 隧道
隧道(tunnel)是建立起来之后,就会在两条连接之间对原始数据进行盲转发的HTTP应用程序。HTTP隧道通常用来在一条或多条HTTP连接上转发非HTTP数据,转发时不会窥探数据。
HTTP隧道的一种常见用途是通过HTTP连接承载加密的安全套接字层(SSL,Secure Sockets Layer)流量,这样SSL流量就可以穿过只允许Web流量通过的防火墙了。
1.8.5 Agent代理
用户Agent代理(或者简称为Agent代理)是代表用户发起HTTP请求的客户端程序。比如:Web浏览器。