应用层
应用层对应用程序的通信提供服务
应用层协议定义:
应用进程交换的报文类型,请求还是响应?
各种报文类型的语法,如报文中的各个字段及其详细描述,
字段的语义,即包含在字段中的信息的含义。
进程何时、如何发送报文,以及对报文进行响应的规则。
应用层的功能:
- 文件传输、访问和管理
- 电子邮件
- 虚拟终端
- 查询服务和远程作业登录
DNS:将域名(网址)转换为 IP 地址
FTP:用于文件传输
HTTP:常用于浏览网页
SMTP、POP3:用于电子邮件(Email)
一、网络应用模型
客户/服务器模型
“服务器”本质上也是一台主机(可理解为性能强悍的电脑)
工作流程:
- 服务器处于接收请求的状态。
- 客户机发出服务请求,并等待接收结果,
- 服务器收到请求后,分析请求,进行必要的处理,得到结果并发送给客户机。
体会 C/S 模型特点:
- 网络中各计算机的地位不平等,服务器可通过对用户权限的限制来达到管理客户机的目的。整个网络的管理工作由少数服务器担当,因此网络的管理非常集中和方便。
- 客户机相互之间不直接通信。例如,在 Web 应用中两个浏览器并不直接通信
- 可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数有限
服务器:提供计算服务的设备。
- 永久提供服务
- 永久性访问地址/域名
客户机:请求计算服务的主机。
- 与服务器通信,使用服务器提供的服务
- 间歇性接入网络
- 可能使用动态IP 地址
- 不与其他客户机直接通信
应用:web,文件传输 FTP,远程登录,电子邮件
P2P(对等)模型
在 CS 模型中,服务器性能的好坏决定了整个系统的性能,当大量用户请求服务时,服务器就必然成为系统的瓶颈。
P2P 模型的思想是整个网络中的传输内容不再被保存在中心服务器上,每个结点都同时具有下载、上传的功能,其权利和义务都是大体对等的。
在 P2P 模型中,各计算机没有固定的客户和服务器划分。相反,任意一对计算机——称为对等方(Peer),直接相互通信。实际上,P2P 模型从本质上来看仍然使用客户/服务器模型,每个结点既作为客户访问其他结点的资源,又作为服务器提供资源给其他结点访问。
体会 P2P 模型特点:
1)减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上,因此大大提高了系统效率和资源利用率。
2)多个客户机之间可以直接共享文档。
3)可扩展性好,传统服务器有响应和带宽的限制,因此只能接受一定数量的请求。
4)网络健壮性强,单个结点的失效不会影响其他部分的结点。
P2P 模型缺点:
在获取服务的同时,还要给其他结点提供服务,因此会占用较多的内存影响整机速度。
- 经常进行 P2P 下载还会对硬盘造成较大的损伤
- 当前 P2P 程序已占互联网 50%~90%的流量,使网络变得非常拥塞
因此各大ISP(互联网服务提供商,如电信、网通等)通常都对 P2P 应用持反对态度。
二、域名系统DNS
域名系统是因特网使用的命名系统,用来把便于人们记忆的具有特定含义的主机名
转换为便于机器处理的IP 地址。
相对于 IP 地址人们更喜欢使用具有特定含义的字符串来标识因特网上的计算机。
值得注意的,DNS 系统采用客户/服务器模型,其协议运行在UDP 之上,使用53号端口。从概念上可将 DNS 分为三部分:层次域名空间、域名服务器 和 解析器
层次域名空间
因特网采用层次树状结构的命名方法。采用这种命名方法,任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称,即域名(DomainName)。
域(Domain)是名字空间中一个可被管理的划分。域可以划分为子域,而子域还可以继续划分为子域的子域,这样就形成了顶级域、二级域、三级域等。每个域名都由标号序列组成,而各标号之间用点(“”)隔开。
服务器的域名,它由三个标号组成:
关于域名中的标号有以下几点需要注意:
- 标号中的英文不区分大小写
- 标号中除连字符(-)外不能使用其他的标点符号。
- 每个标号不超过 63 个字符,多标号组成的完整域名最长不超过 255 个字符。
- 级别最低的域名写在最左边,级别最高的顶级域名写在最右边。
顶级域名(Top LevelDomain,TLD)分为如下三大类:
1)国家(地区)顶级域名(nTLD)。国家和某些地区的域名,如“.cn”表示中国,“.us”表示美国
“.uk”表示英国。
2)通用顶级域名(gTLD)。常见的有“.com”(公司)、“net”(网络服务机构)、“.org”(非营利性
组织)、“.edu”(教育机构)、和“.gov”(国家或政府部门)等。
- 基础结构域名(arpa)。用于反向域名解析,即 IP 地址反向解析为域名。
在域名系统中,各级域名由其上一级的域名管理机构管理,顶级域名由因特网名称与数字地址分配机构(ICANN)管理。国家顶级域名下注册的二级域名均由该国家自行确定,每个组织都可以将它的域再分成一定数目的子域,并将这些子域委托给其他组织去管理。例如,管理cn 域的中国将 edu.cn 子域授权给中国教育和科研计算机网(CERNET)来管理。
域名服务器
域名到 IP 地址的解析是由运行在域名服务器上的程序完成的,一个服务器所负责管辖的(或有权限的)范围称为区(小于或等于“域”),一个区中的所有结点必须是能够连通的,每个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP 地址的映射。每个域名服务器不但能够进行一些域名到 IP 地址的解析,而且还必须具有连向其他域名服务器的信息。当自己不能进行域名到IP 地址的转换时,能够知道到什么地方去找其他域名服务器
客户端 DNS 使用了大量的域名服务器,它们以层次方式组织。没有一台域名服务器具有因特网上所有主机的映射,相反,该映射分布在所有的域名服务器上。有4种类型的域名服务器。
1.根域名服务器
根域名服务器是最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。根域名服务器是最重要的域名服务器,不管是哪个本地域名服务器,要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。因特网上有 13 个根域名服务器,尽管我们将这 13 个根域名服务器中的每一个都视为单个服务器,但每个“服务器”实际上是冗余服务器的集群,以提供安全性和可靠性。需要注意的是,根域名服务器用来管辖顶级域(如.com),通常它并不直接把待查询的域名直接转换成地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器进行查询。
2.顶级域名服务器
这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。收到 DNS 查询请求时就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的 IP 地址)。
3.权限域名服务器(授权域名服务器)
每台主机都必须在权限域名服务器处登记。为了更加可靠地工作,一台主机最好至少有两个权限域名服务器。实际上,许多域名服务器都同时充当本地域名服务器和权限域名服务器。权限域名服务器总能将其管辖的主机名转换为该主机的IP 地址。
4.本地域名服务器
本地域名服务器对域名系统非常重要。每个因特网服务提供者(ISP),或一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器。当一台主机发出 DNS 查询请求时,这个查询请求报文就发送给该主机的本地域名服务器。事实上,我们在Windows 系统中配“本地连接”时,就需要填写 DNS 地址,这个地址就是本地 DNS(域名服务器)的地址。
域名解析过程
域名解析是指把域名转化为 IP 地址的过程。当客户端需要域名解析时,通过本机的 DNS 客户端构造一个 DNS 请求报文,以 UDP 数据报方式发往本地域名服务器。域名解析有两种方式:递归查询和迭代查询。
(1)主机向本地域名服务器的查询都采用递归查询
递归查询是指若主机所询问的本地域名服务器不知道被查询域名的地址,则本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步的查询。两种查询方式的这一步是相同的。
(2)本地域名服务器向其他域名服务器采用递归查询或迭代查询
迭代查询 DNS 的工作原理
本地域名服务器向根域名服务器的査询通常是采用迭代查询。当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要査询的IP 地址,要么告诉本地域名服务器:“你下一步应当向哪个顶级域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不替本地域名服务器进行后续的查询)。同样,顶级域名服务器收到查询报文后,要么给出所要查询的 IP 地址,要么告诉本地域名服务器下一步应当向哪个权限域名服务器查询。最后,知道了所要解析的域名的IP 地址后,把这个结果返回给发起查询的主机。
为了提高 DNS 的查询效率,并减少因特网上的 DNS 查询报文数量,在域名服务器中广泛地使用了高速缓存,用来缓存最近查询过的域名的相关映射信息。这样,当另一个相同的域名查询到达该 DNS 服务器时,该服务器就能直接提供所要求的 IP 地址。因为主机名和 IP 地址之间的映射不是永久的,所以 DNS 服务器将在一段时间后丢弃高速缓存中的信息。在主机中同样也很需要高速缓存,许多主机在启动时从本地域名服务器下载域名和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到域名时才使用域名服务器。
三、文件传输协议FTP
FTP 的工作原理
文件传输协议(File Transfer Protocol,FTP)是因特网上使用得最广泛的文件传输协议
FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。它屏蔽了各计算机系统的细节,因而适合于在异构网络中的任意计算机之间传送文件。
FTP 提供以下功能:
- 提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。
- 以用户权限管理的方式提供用户对远程 FTP 服务器上的文件管理能力。
- 以匿名 FTP 的方式提供公用文件共享的能力。
FTP 在传输层所使用的协议
FTP 采用客户/服务器的工作方式,使用 TCP 可靠的传输服务。
一个 FTP 服务器进程可同时为多个客户进程提供服务。
FTP 的服务器进程由两大部分组成:
一个主进程,负责接收新的请求
另外有若干从属进程,负责处理单个请求
其工作步骤如下:
- 打开熟知端口 21(控制端口),使客户进程能够连接上
- 等待客户进程发连接请求。
- 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,回到等待状态,继续接收其他客户进程的请求。主进程与从属进程是并发执行的。
FTP 服务器必须在整个会话期间保留用户的状态信息。特别是服务器必须把指定的用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置。
控制连接与数据连接
FTP 在工作时使用两个并行的 TCP 连接:一个是控制连接(服务器端口号 21),一个是数据连接(服务器端口号 20)。使用两个不同的端口号可以使协议更容易实现。
1.控制连接
服务器监听 21号端口,等待客户连接,建立在这个端口上的连接称为控制连接,用来传输控制信息(如连接请求、传送请求等)。FTP 客户发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。在传输文件时还可以使用控制连接(如客户在传输中途发一个中止传输的命令),因此控制连接在整个会话期间一直保持打开状态。
2.数据连接
服务器端的控制进程在接收到 FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”。数据连接用来连接客户端和服务器端的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”结束运行。
数据连接有两种传输模式:主动模式 PORT和被动模式 PASV
PORT模式的工作原理:
客户端连接到服务器的 21 端口,登录成功后要读取数据时,客户端随机开放一个端口,并发送命令告知服务器,服务器收到 PORT 命令和端口号后,通过 20 端口和客户端开放的端口连接,发送数据。
PASV 模式的不同点是,客户端要读取数据时,发送 PASV命令到服务器,服务器在本地随机开放一个端口,并告知客户端,客户端再连接到服务器开放的端口进行数据传输。
可见是用 PORT 模式还是 PASV 模式,选择权在客户端。简单概括为,主动模式传送数据是“服务器”连接到“客户端”的端口;
被动模式传送数据是“客户端”连接到“服务器”的端口。
因为 FTP 使用了一个分离的控制连接,所以也称 FTP 的控制信息是带外(Out-of-band)传送的。使用 FTP 时,要修改服务器上的文件,就需要先将此文件传送到本地主机,然后将修改后的文件副本传送到原服务器,来回传送耗费很多时间。网络文件系统(NFS)采用另一种思路,它允许进程打开一个远程文件,并能在该文件的某个特定位置开始读写数据。这样,NFS 可使用户只复制一个大文件中的一个很小的片段,而不需要复制整个大文件。
四、电子邮件
电子邮件系统的组成结构
自从有了因特网,电子邮件就在因特网上流行起来。电子邮件是一种异步通信方式,通信时不需要双方同时在场。电子邮件把邮件发送到收件人使用的邮件服务器,并放在其中的收件人邮箱中,收件人可以随时上网到自己使用的邮件服务器进行读取。
一个电子邮件系统应具有三个最主要的组成构件,即用户代理(UserAgent)、邮件服务器和电子邮件使用的协议,如 SMTP、POP3(或 IMAP)等。
- 用户代理是用户与电子邮件系统的接口,又称为电子邮件客户端软件。
- 邮件服务器是电子邮件系统的基础设施。因特网上所有的 TSP 都有邮件服务器,其功能是发送和接收邮件,同时还要负责维护用户的邮箱。
- 协议包括邮件发送协议(如 SMTP)和邮件读取协议(如 POP3,IMAP)。
邮件发送协议和读取协议的应用
邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,如 SMTP
邮件读取协议用于用户代理从邮件服务器读取邮件,如 POP3;
注意,SMTP 用的是“推”(Push)的通信方式,即用户代理向邮件服务器发送邮件及在邮件服务器之间发送邮件时,SMTP 客户将邮件“推”送到 SMTP 服务器。
而POP3 用的是“拉”(Pu)的通信方式,即用户读取邮件时,用户代理向邮件服务器发出请求“拉”取用户邮箱中的邮件。
电子邮件的收发过程:
- 发件人调用用户代理来撰写和编辑要发送的邮件。
- 邮件撰写完后,发件人点击“发送邮件”按钮,把发送邮件的工作全都交给用户代理来完成,就什么都不用管了。用户代理用 SMTP 把邮件传送给发送端邮件服务器。
- 发送端邮件服务器将邮件放入邮件缓存队列中,等待发送。
- 发送端邮件服务器的 SMTP 客户与接收端邮件服务器的 SMTP 服务器建立 TCP 连接,然后就把邮件缓存队列中的邮件依次发送出去。
注意,邮件是直接传送给接收端邮件服务器的,而不会在互联网的某个中间邮件服务器落地。
- 运行在接收端邮件服务器中的 SMTP 服务器进程收到邮件后,将邮件放入收件人的用户邮箱,等待收件人在方便时进行读取。
- 收件人打算收信时,调用用户代理,使用 POP3(或 IMAP)协议将自己的邮件从接收端邮件服务器的用户邮箱中取回(如果邮箱中有来信的话)。
电子邮件格式与 MIME
电子邮件格式
一个电子邮件分为信封和内容两大部分,邮件内容又分为首部和主体两部分
RFC822规定了邮件的首部格式,而邮件的主体部分则让用户自由撰写。用户写好首部后,邮件系统自动地将信封所需的信息提取出来并写在信封上,用户不需要亲自填写信封上的信息。邮件内容的首部包含一些首部行,每个首部行由一个关键字后跟冒号再后跟值组成。有些关键字是必需的,有些则是可选的。最重要的关键字是To 和 Subject。
To 是必填的关键字,后面填入一个或多个收件人的电子邮件地址。电子邮件地址的格式为:
收件人邮箱名@邮箱所在主机的域名,如 abc@123n.com,其中邮箱名 abc在 123n.com 这个邮件服务器上必须是唯一的。这也就保证了该邮件地址在整个因特网上是唯一的。
Subject 是可选关键字,是邮件的主题,反映了邮件的主要内容。
当然,还有一个必填的关键字是 From,但它通常由邮件系统自动填入,
首部与主体之间用个空行进行分割。
SMTP 通信有以下三个阶段。
(1)连接建立
发件人的邮件发送到发送方邮件服务器的邮件缓存中后,SMTP客户就每隔一定时间对邮件缓存扫描一次。如发现有邮件,就与接收方邮件服务器的SMTP服务器建立TCP连接,SMTP服务器使用的熟知端口号为 25。连接建立后,接收方SMTP 服务器发出 220Serviceready(服务就绪)。然后 SMTP 客户向 SMTP 服务器发送 HELO 命令,附上发送方的主机名。SMTP 不使用中间的邮件服务器。TCP 连接总是在发送方和接收方这两个邮件服务器之间直接建立,而不管它们相隔多远,不管在传送过程中要经过多少个路由器。当接收方邮件服务器因故障暂时不能建立连接时,发送方的邮件服务器只能等待一段时间后再次尝试连接。
(2)邮件传送
连接建立后,就可开始传送邮件。邮件的传送从 MAIL命令开始,MAIL命令后面有发件人的地址。如 MAILFROM:<fh@hit.edu.cn>。若 SMTP 服务器已准备好接收邮件,则回答 2500K 下面跟着一个或多个 RCPT 命令,格式为 RCPTTO:<收件人地址>。每发送一个 RCPT命令,都应有相应的信息从 SMTP 服务器返回,如 2500K或550Nosuchuser here(无此用户)RCPT命令的作用是,先弄清接收方系统是否已做好接收邮件的准备,然后才发送邮件,以便不至于发送了很长的邮件后才知道地址错误,进而避免浪费通信资源。
(3)连接释放
邮件发送完毕后,SMTP 客户应发送 QUIT 命令。SMTP 服务器返回的信息是 221(服务关闭),表示 SMTP 同意释放 TCP 连接。邮件传送的全部过程就此结束。
POP3 和IMAP
邮局协议(POP)是一个非常简单但功能有限的邮件读取协议,现在使用的版本是 POP3。POP也采用客户/服务器模式,在传输层使用 TCP,端口号为110。
接收方的用户代理必须运行 POP 客户程序,而接收方的邮件服务器中则运行POP 服务器程序。
POP 有两种工作方式:“下载并保留”和“下载并删除”。
在“下载并保留”方式下,用户从邮件服务器上读取邮件后,邮件依然会保存在邮件服务器上用户可再次从服务器上读取该邮件:而使用“下载并删除”方式时,邮件一旦被读取,就被从邮件服务器上删除。
另一个邮件读取协议是因特网报文存取协议(IMAP),它比POP复杂得多,IMAP 为用户提供了创建文件夹、在不同文件夹之间移动邮件及在远程文件夹中查询邮件等联机命令,为此 IMAP服务器维护了会话用户的状态信息。IMAP 的另一特性是允许用户代理只获取报文的某些部分,例如可以只读取一个报文的首部,或多部分 MIME 报文的一部分。这非常适用于低带宽的情况用户可能并不想取回邮箱中的所有邮件,尤其是包含很多音频或视频的大邮件。
此外,随着万维网的流行,目前出现了很多基于万维网的电子邮件,如Hotmail、Gmail 等这种电子邮件的特点是,用户浏览器与 Hotmail 或 Gmail 的邮件服务器之间的邮件发送或接收使用的是 HTTP,而仅在不同邮件服务器之间传送邮件时才使用 SMTP。
五、WWW和HTTP
万维网(World Wide Web,WWW)是一个分布式、联机式的信息存储空间,在这个空间中:一样有用的事物称为一样“资源”,并由一个全域“统一资源定位符”(URL)标识。这些资源通过超文本传输协议(HTTP)传送给使用者,而后者通过单击链接来获取资源。
万维网使用链接的方法能非常方便地从因特网上的一个站点访问另一个站点,从而主动地按需获取丰富的信息。
超文本标记语言使得万维网页面的设计者很方便地用一个超链接从本页面的某处链接到因特网上的任何一个页面,并能在自己的计算机屏幕上显示这些页面。
万维网的内核部分是由三个标准构成的:
- 统一资源定位符(URL)。负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内具有唯一的标识符 URL。
- 超文本传输协议(HTTP)。一个应用层协议,它使用TCP 连接进行可靠的传输,HTTP 是万维网客户程序和服务器程序之间交互所必须严格遵守的协议。
- 超文本标记语言(HTML)。一种文档结构的标记语言,它使用一些约定的标记对页面上的各种信息(包括文字、声音、图像、视频等)、格式进行描述。
URL 是对可以从因特网上得到的资源的位置和访问方法的一种简洁表示。
URL 相当于一个文件名在网络范围的扩展。URL的一般形式是:
<协议>指用什么协议来获取万维网文档,常见的协议有 http、p 等,<主机>是存放资源的主机,在因特网中的域名或 IP 地址;<端口>和<路径>有时可省略。在 URL 中不区分大小写。
万维网以客户/服务器模式工作。浏览器是在用户主机上的万维网客户程序,而万维网文档所驻留的主机则运行服务器程序,这台主机称为万维网服务器。客户程序向服务器程序发出请求服务器程序向客户程序送回客户所要的万维网文档。
工作流程如下:
1)Web 用户使用浏览器(指定 URL)与 Web 服务器建立连接,并发送浏览请求。
2)Web 服务器把 URL 转换为文件路径,并返回信息给 Web 浏览器。
- 通信完成,关闭连接。
万维网是无数个网络站点和网页的集合,它们在一起构成了因特网最主要的部分(因特网也包括电子邮件、Usenet 和新闻组)。
超文本传输协议(HTTP)
HTTP 定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务怎样把文档传送给浏览器。从层次的角度看,HTTP 是面向事务(Transaction-oriented)的应用层协议它规定了在浏览器和服务器之间的请求和响应的格式与规则,是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。
HTTP 的操作过程
从协议执行过程来说,浏览器要访问WWW 服务器时,首先要完成对 WWW 服务器的域名解析。一旦获得了服务器的IP 地址,浏览器就通过 TCP 向服务器发送连接建立请求。每个万维网站点都有一个服务器进程,它不断地监听 TCP 的端口 80(默认),当监听到连接请求后便与浏览器建立 TCP 连接。
然后,浏览器就向服务器发送请求获取某个 Web 页面的 HTTP 请求。服务器收到请求后将构建所请求 Web 页的必需信息,并通过 HTTP 响应返回给浏览器。
浏览器再将信息进行解释,然后将 Web 页显示给用户。
最后,TCP 连接释放。
HTTP 的特点:
HTTP 使用 TCP 作为传输层协议,保证了数据的可靠传输。HTTP不必考虑数据在传输过程中被丢弃后又怎样被重传。但是,HTTP 本身是无连接的(务必注意)。也就是说,虽然 HTTP使用了 TCP 连接,但通信的双方在交换 HTTP 报文之前不需要先建立 HTTP 连接。HTTP是无状态的。也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时的相同,因为服务器并不记得曾经服务过的这个客户。
HTTP 的无状态特性简化了服务器的设计,使之更易支持大量并发的请求。在实际应用中,通常使用 Cookie 加数据库的方式来跟踪用户的活动(如记录用户最近浏览的商品等)。Cookie 的工作原理:当用户初次浏览某个使用 Cookie 的网站时,该网站服务器就为用户产生一个唯一的 Cookie 识别码,如“12345”,并以此为索引在后端数据库中创建一个项目,用来记录用户访问该网站的各种信息。接着在给用户的响应报文中添加一个Set-cookie 的首部行“Set cookie:12345”用户收到响应后,就在它管理的特定 Cookie 文件中添加该服务器的主机名和 Cookie 识别码。当用户再次浏览这个网站时,会取出这个网站的识别码,并在请求报文中添加一个 Cookie 首部行“Cookie:12345”。服务器根据 Cookie 识别码就能从数据库中查询到该用户的活动记录,进而执行一些个性化的工作,如根据用户的历史浏览记录向其推荐新商品等。
HTTP 既可以使用非持续连接(HTTP/1.0),也可以使用持续连接(HTTP1.1 支持)。
HTTP 页面请求时间的分析
对于非持续连接,每个网页元素对象(如 JPEG 图形、Flash 等)的传输都需要单独建立一个TCP 连接,(第三次握手的报文段中捎带了客户对万维网文档的请求)。请求一个万维网文档所需的时间是该文档的传输时间(与文档大小成正比)加上两倍往返时间 RTT(一个 RTT用于 TCP连接,另一个 RTT用于请求和接收文档)。每请求一个对象都导致 2xRTT 的开销,此外每次建立新的 TCP 连接都要分配缓存和变量,使万维网服务器的负担很重。所谓持续连接,是指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和该服务器可以继续在这条 TCP 连接上传送后续的 HTTP 请求报文和响应报文
HTTP/1.1 页面请求时间的分析
HTTP/1.1 默认使用持续连接。持续连接又分为非流水线和流水线两种工作方式。对于非流水线方式,客户在收到前一个响应后才能发出下一个请求,服务器在发送完一个对象后,其 TCP连接就处于空闲状态,浪费了服务器资源。对于流水线方式,客户可以连续发出对各个对象的请求,服务器就可连续响应这些请求。若所有的请求和响应都是连续发送的,则引用所有对象共计经历1个RTT延迟,而不是像非流水线方式那样,每个对象都必须有1个RTT延迟这种方式减少了 TCP 连接中的空闲时间,提高了效率。当然,在流水线方式中,服务器在每个RTT 连续发送的数据量还受到 TCP 发送窗口的限制。
HTTP 的报文结构
HTTP 是面向文本的(Text-Oriented),因此报文中的每个字段都是一些 ASCI码串,并且每个字段的长度都是不确定的。
有两类 HTTP 报文:
- 请求报文:从客户向服务器发送的请求报文。
- 响应报文:从服务器到客户的回答。
开始行:在请求报文中的开始行称为请求行,而在响应报文中的开始行称为状态行。开始行的三个字段之间都以空格分隔,最后的“CR”和“LF”分别代表“回车”和“换行”。
首部行:用来说明浏览器、服务器或报文主体的一些信息。
首部可以有几行,但也可以不使用。在每个首部行中都有首部字段名和它的值,每一行的结束都要有“回车”和“换行。整个首部行结束时,还有一空行将首部行和后面的实体主体分开。
实体主体:在请求报文中一般不用这个字段,而在响应报文中也可能没有这个字段。
请求报文的“请求行”有三个内容:方法、请求资源的 URL 及 HTTP 的版本。
其中,“方法”是对所请求对象进行的操作,这些方法实际上也就是一些命令。