这是关于网络系列的第四篇文章,接下来会有更多精彩内容.敬请期待! 让我们一起乘风破浪!
从该篇开始, 我们学习应用层的 HTTP 协议.HTTP 协议本身内容较为丰富, 希望你能通过该系列文章有所收获.
本篇旨在理解 HTTP 客户端服务器交互过程,对其模型有大体了解,不做深入了解。你可以了解到一下内容:
- Web 客户端于服务器是如何通信的
- 表示 Web 内容的资源来自何方
- Web 事务是怎样工作的
- HTTP 通信所使用的报文格式
- 底层 TCP 网络传输
- HTTP 协议演变
- Web 结构组件
Web 客户端于服务器是如何通信的
先看下面一张通信草图:
可见,该通信方式是,客户端向服务器发送请求(Request),服务器回送请求数据(Response),也就是请求应答模式。
表示 Web 内容的资源来自何方
资源可以是存储在服务器上的静态文件,如文本文件、图片文件、影视文件等;也可以是根据用户身份生成的动态文件,如个人的照片,在线商店购物订单。
-
媒体类型 在如此众多的资源中,HTTP 为了解每种资源的类型,会对资源打上标签,称之为
MIME type
,在 Web 服务器回送的数据中包含该内容。客户端可以根据资源类型决定如何处理该资源。常见的MIME type
有:text/html
HTML
格式的文本类型text/plain
普通的ASCII
文本类型image/jpeg
JPEG
格式图片类型image/gif
GIF
格式的图片类型video/quicktime
Apple
公司QuickTime
电影类型application/vnd.ms-powerpoint
微软PowerPoint
文件类型
URI
服务器上的每一个资源,都会有自己的标识,称为统一资源标识符(Uniform Resource Identifier, URI)
,它可以在世界范围内标识并定位信息资源。-
URL
URL
是URI
最常见的形式(另一种是下面讨论的URN
),称为统一资源定位符
。它描述了一台服务器上某资源的特定位置,可以精确的定位一个资源。如,http://www.baidu.com/image/girl.gif
。大部分URL
都遵循该格式,它包括下面几个部分:http://
称为方案(scheme),说明了访问资源使用的协议类型,这里通常是http://
www.baidu.com
服务器地址(说为域名更为合适),也可以使IP
地址- 其余部分指定了资源在服务器的位置和名称,也可以包含参数在最后,用
?
隔开。
URN
URN
是统一资源名,也是URI
的一种。作为特定资源的唯一名称使用,与资源的所在地无关。现阶段,URN
并未大范围使用。- 在实际应用中,并没有对
URI
和URL
进行特定区分。
Web 事务是怎样工作的
一个 HTTP 事务是由一条请求命令和一个响应结果组成。这种通信通过 HTTP 报文的格式化数据块进行。
-
方法
HTTP 支持几种不同的请求命令,这些命令称为 HTTP 方法。每个 HTTP 请求都会包含一个方法,负责告诉服务器执行什么动作。常见的方法如下:HTTP 方法 描述 GET 告知服务器,需要从服务器向客户端发送命名资源 PUT 将客户端的数据存储的命名的服务器资源中 DELETE 从服务器删除资源 POST 将客户端数据发送到一个服务器应用程序 HEAD 仅发送命名资源响应中的 HTTP 首部 更详细的介绍在后续文章中。
-
状态码
每条 HTTP 响应报文返回时都会携带状态码,告知客户端是否请求成功,或者是否需要采取其他动作。常见的状态码:HTTP 状态码 描述 200 请求成功 302 Redirect,重定向。到其他地方获取资源 404 Not Found,没找到。无法找到资源 通常,和状态码一起的还有一条解释性的短语,对该状态进行描述。更详细的介绍在后续文章中。
-
复合页面 看下面一个例子:
该页面中的每一个资源都要使用一个单独的 HTTP 事务。
HTTP 通信所使用的报文格式
HTTP 报文是由一行一行的简单字符串组成。都是纯文本,不是二进制。客户端发送给服务器的称为请求报文(request message)
,服务器发往客户端的称为响应报文(response message)
。HTTP 报文组成:
- 起始行
报文的第一行,请求报文
中用来说明要做什么,在响应报文
中说明出现的情况。 - 首部字段
起始行之后可以有零个或多个首部字段。每个首部字段是一个键值对。首部以一个空行结束。 -
主体
首部的空行之后是主体。请求主体中包括要发送给服务器的数据,响应主体中包括返回给客户端的数据。主体的数据不具有结构化,可以包含任意二进制数据和文本。下面是一个请求和响应报文示例:
底层 TCP 网络传输
HTTP 是应用层协议,它无需关系网络通信的具体细节,把联网的细节都交给了通用可靠的 TCP/IP。相关内容,请查看该篇起始位置给出的链接.
下面是一个建立链接请求数据的过程:
总结步骤如下:
- 从
URL
解析主机名(或称为域名) - 通过主机名获取 IP 地址
- 解析端口号(如果有的话),没有使用默认的
80
- 建立于服务器的
TCP
链接 - 向服务器发送 HTTP 请求报文
- 服务器返回 HTTP 响应报文
- 关闭链接
HTTP 协议演变(了解)
HTTP/0.9
HTTP 的 1991 原型版。有很多严重的设计缺陷,只支持 GET 方法,不支持多媒内容的 MIME 类型,各种 HTTP 首部或版本号。其初衷是为了获取 HTML 对象,很快就被 1.0 版本取代。HTTP/1.0
1.0 是一个广泛使用的版本。添加了版本号,各种首部,一些额外方法,已经对多媒体对象的处理。它使得包含生动图片的 Web 页面和交互式表格成为可能。HTTP/1.0+
在 20 实际 90 年代中叶,为了满足快速扩张的互联网需要,流行的客户端和服务器在 HTTP 中添加了各种特性,包含keep-alive
,虚拟主机支持,以及代理链接支持。带有这种非官方的 HTTP 版本通常称为HTTP/1.0+
。HTTP/1.1
HTTP/1.1
重点是校正 HTTP 设计中的结构性缺陷,明确语义,引入重要的性能优化措施,删除不好的特性。HTTP/NG(HTTP/2.0)
2.0 版注重性能的大幅优化,以及更强大的服务逻辑远程执行框架。更具体的 HTTP/2.0 介绍看这里。
Web 结构组件
主要了解概念,更细致的讨论在后续文章中。
-
代理
客户端和服务器之间的 HTTP 中间实体。接收所有客户端的 HTTP 请求,并转发给服务器(可能对请求进行修改)。对于用户来说,这些中间件就是代理,代表用户访问服务器。 -
缓存
Web缓存
或代理缓存
是一种特殊的 HTTP 代理服务器,可以将经过代理传送的常用文件复制保存起来,下一个请求同一文件的客户端就可以使用该缓存。 -
网关
网关也是一种特殊的服务器,作为其他服务器的中间实体使用,具有特定的功能。如下,HTTP/FTP
网关,负责将 HTTP 客户端的 HTTP 请求,在响应客户端之前,网关会去 FTP 服务器请求对应数据。实现了客户端 HTTP 协议到 FTP 协议的转换。 -
隧道
HTTP 隧道通常用来在一条或多条 HTTP 链接上转发非 HTTP 数据,转发时不会窥探数据。比如通过 HTTP 链接承载加密的安全套接字层(SSL)流量,这样 SSL 流量就可以穿过只允许 Web 流量通过的防火墙。 -
Agent 代理
用户Agent代理
简称为Agent代理
,是代表用户发起 HTTP 请求的客户端应用程序(浏览器)。在 HTTP 请求报文的首部中存在User-agent
字段,表示了发送当前请求的代理信息。用户代理不仅包含浏览器,还有一些其他的程序,脚本等,如“网络蜘蛛”,“Web 机器人”,它们专门在互联网上收集信息。
结语
通过该篇,我们了解了 HTTP 的通信模型(请求应答模式),事务的定义,还简单的了解了 HTTP 的报文结构以及 Web 结构组件等.后序文章将会分块介绍 HTTP 的相关知识,关注我你就能及时看到哈.