Web 浏览器、服务器和相关的 Web 应用程序都是通过 HTTP 相互通讯的。HTTP 是现代全球因特网中使用的公共语言。本章特别介绍以下内容:
- Web 客户端与服务器是如何通讯的
- 资源来自何方
- Web 事务是怎样工作的
- HTTP 通讯所用的报文格式
- 底层 TCP 网络传输
- 不同 HTTP 协议变体
- 因特网上安装大量 HTTP 架构组件中的一部分
Web 客户端和服务器
Web 内容是存储在 Web 服务器上的,Web 服务器所使用的是 HTTP 协议,因此经常会被称为 HTTP 服务器。客户端向服务器发送 HTTP 请求,服务器会在 HTTP 响应中会送所有请求数据。最常见的客户端就是 Web 浏览器。
资源
Web 服务器是 Web 资源的宿主。Web 资源是 Web 内容的源头。最简单的资源就是 Web 服务器里的静态文件。但资源不一定非得是静态文件,资源还可以是根据需要生成内容的软件程序。这些动态内容资源可以根据你的身份、所请求的信息或时段来产生内容。
媒体类型
因特网上有数千种不同的数据类型,HTTP 给每种要通过 Web 传输的对象打上了名为 MIME 类型的数据格式标签。Web 服务器会为所有的 HTTP 对象附加一个 MIME 类型,当 Web 浏览器从服务器中取回一个对象时,会去查看相关的 MIME 类型,看看它是否知道要如何处理这个对象。
MIME 类型是一种文本标记,表示一种主要对象类型和一个特定的子类型,中间由一条斜杠来分隔。
- Html 的文本文档由 text/heml 类型来标记
- GIF 格式的图片为 image/gif 类型
URI
每个 Web 服务器资源都有一个名字,这样客户端就可以说明它们感兴趣的资源是什么了。服务器资源名被称为***统一资源标识符(Uniform Resource Identifier)。***
URI 有两种形式,分别称为 URL 和 URN。
URL
***统一资源定位符***是资源标识符中最常见的形式。URL 描述了一台特定服务器上某资源的特定位置
大部分 URL 都遵循一种标准格式,这种格式包含三个部分:
- URL 的第一部分被称为方案,说明了访问资源所使用的协议类型。这部分通常就是 HTTP 协议(http://)。
- 第二部分给出了服务器的因特网地址
- 其余部分指定了因特网上的某个资源
事务
一个 HTTP 事务由一条(从客户端发往服务器的)请求命令和一个(从服务器发回客户端的)响应结果组成。这种通信是通过名为 HTTP 报文的格式化数据块进行的。
方法
HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法。每条 HTTP 请求报文都包含一个方法,这个方法回告诉服务器要执行什么动作(获取一个 Web 也面、运行一个网管程序、删除一个文件等)
HTTP 方法 | 描述 |
---|---|
GET | 从服务器向客户端发送命名资源 |
PUT | 将来自客户端的数据存储到一个命名的服务器资源中 |
DELETE | 从服务器中产出命名资源 |
POST | 将客户端数据发送到一个服务器网关应用程序 |
HEAD | 仅发送命名资源响应中的 HTTP 首部 |
状态码
每条 HTTP 响应报文返回时都会携带一个状态码。状态吗是一个三位数字的代码,告知客户端请求是否成功,或者是否需要采取其他动作。
HTTP 状态码 | 描述 |
---|---|
200 | OK,文档正确返回 |
302 | Redirct(重定向),到其他地方去获取资源 |
404 | Not Foud,无法找到这个资源 |
报文
HTTP 报文是由一行一行简单字符串组成的。
从 Web 客户端发往 Web 服务器的 HTTP 报文称为请求报文。从服务器发往客户端的报文称为响应报文。
HTTP 报文包括以下三个部分:
- 起始行
在请求报文中用来说明做什么,在响应报文中说明出现了什么情况 - 首部字段
起始行后面有零或多个首部字段。每个首部字段包含一个名字和一个值,为了便于解析,两者之间使用冒号来分隔。首部以一个空行结束。 - 主体
其中包含了所有类型的数据。请求主体包含了要发送给 Web 服务器的数据;响应主体装载了要返回给客户端的数据。起始行和首部都是文本形式或格式化的,而主体则不同,主体中可以包含任意二进制数据。
连接
报文是如何通过传输控制协议连接从一个地方到另一个地方的?
TCP/IP
HTTP 是个应用层协议。HTTP 无需关心网络通信的具体细节,它把联网的细节都交给了通用、可靠的因特网传输协议 TCP/IP。
浏览器是怎样通过 HTTP 显示位于远端服务器的某个 HTML 资源?
步骤如下:
- 浏览器从 URL 中解析处服务器的主机名
- 浏览器将服务器的主机名转换为服务器的 IP 地址
- 浏览器将端口号从 IP 地址中解析出来
- 浏览器建立一条与 Web 服务器的 TCP 连接
- 浏览器向服务器发送一条 HTTP 请求报文
- 服务器向浏览器回送一条 HTTP 响应报文
- 关闭连接,浏览器显示文档
使用 Telnet 实例
Telnet 程序可以将键盘连接到某个目标 TCP 端口。可以通过 Telnet 直接与 Web 服务器对话。通过 Telnet 可以一条到某台机器上某个端口的 TCP 连接,然后直接向那个端口输入一些字符。
Web 的结构组件
代理
代理位于客户端和服务器之间,接收所有客户端的 HTTP 请求,并将这些请求转发给服务器。
缓存
Web 缓存是一种特殊的 HTTP 代理服务器。可以将进过代理传送的常用文档复制保存起来。下一个请求同以文档的客户端就可以享受缓存的私有副本所提供的服务了。
网关
网关是一种特殊的服务器,通常用于将 HTTP 流量转换为其他的协议。
隧道
隧道是建立起来之后,就会在两条连接之间对原始数据进行盲转发的 HTTP 应用程序。HTTP 隧道通常用来在一条或多条 HTTP 连接上转发非 HTTP 数据,转发时不会窥探数据。