© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.net 作者简介
:周世杰(
1971-)
,男
,四川自贡人
,助理工程师
,硕士
,主要研究方向
:中间件技术、
OA技术、电子商务和网络安全
.文章编号
:1001-9081(
2001)
08-0027-02
文件传输协议分析及应用
周世杰
,秦志光
(电子科技大学微机所
,四川成都
610054)
摘 要
:分析了各种文件传输协议和传输方式的优缺点
,论述了利用
HTTP协议进行文件传输的
机制和特点
,设计了
HTTP文件传输中的消息格式
,分析了
HTTP中文件传输的数据发送和接收过程
,
提出了利用
HTTP协议进行文件传输的软件设计模型
,并给出了具体实现方案。
关键词
:HTTP;协议
;文件
;文件传输
;应用
中图分类号
:TP311.12 文献标识码
:A
1 网络环境下的文件传输协议和方式
在网络环境下
,文件传输方式主要有
:文件传输协议方式
(
FTP)、远程拷贝方式(
RCP)、套接字方式(
SOCKET)[1~3]
。传
统方式下
,利用
FTP协议进行文件传输最为普遍
,这种方式的
优点是适用面广、使用简单、不需要用户编制额外的应用软件
(一般集成在操作系统或者网络协议中)
;其缺点是在广域网
上传输大文件时可靠性较低、不支持断点续传
,因而对大文件
和传输精度要求很高的应用不适合。远程拷贝协议是采用大
型或中型计算机作文件服务器
,将所有文件信息都存放到该
服务器上
;其他用户作为文件使用者通过网络进行文件传输。
RCP的优点是适合在局域网内进行大文件或者目录的拷贝
,
但在
Internet上使用时
,安全性很难控制[3]
;利用
TCP或者
UDP提供的套接字直接在服务器和客户机之间进行文件传输
的优点是实现过程可以由应用程序开发者直接控制
,因而灵
活性很高
,缺点是编程复杂
,可靠性完全依赖于应用程序开发
者
,这种方式适用于局域网内的消息传递。由此可见
,传统的
文件传输协议和方式都存在很大的缺点。
随着
Web技术的发展和用户对文件传输可靠性要求的
提高
,采用传统的方式势必影响文件传输在实际中的应用和
推广
;同时
WWW技术的广泛应用
,也要求新的文件传输协议
和方式
,使用
HTTP协议进行文件传输就适应了这种需求。
2
HTTP协议对文件传输的支持
图
1
HTTP协议的请求
/响应
HTTP协议建立在请求
/应答模型上[4,5]
,一个请求的程序
(叫作客户)与一个接收程序(叫作服务器)建立连接。
HTTP
协议中传输的数据称为实体(
Entity)
,它可能包含请求和响应
资源的特定表示或解释
.一个实体由实体首部(
Entity-Head)
和实体主体(
Entity
—Body)构成。在请求
/响应模型中
,客户请
求的形式是请求方法、统一资源标示符(
URI)和协议版本号
,
后面紧跟包含请求参数、客户信息
,可能还有信息自身的内容
等
,服务器用一个状态响应(包括它的协议版本号、成功或失败代码)
,后面紧跟包含服务器信息、实体信息
,可能还有信息
的内容等。请求
/响应模型的一次完整会话过程如图
1所示。
HTTP/1.1及以后的版本的请求型消息(
RequestMessage)
中定义了多种请求方法[6]
,其中
GET、
HEAD、
PUT方法可以用
于文件传输。
GET方法用于存取由请求统一资源标示符
(
Request
—URI)指定的任何信息
,HEAD方法除去服务器不会
包含在响应中返回任何实体主体之外
,功能和
GET方法是一
样的
,PUT方法请求将封装的实体放在提供的请求统一资源
标示符中
,如果请求的
URI指向一个已经存在的资源
,则该实
体被视为驻留在服务器上的修改版
,否则在服务器上创建该
资源。
GET和
HEAD方法用于下传文件
,PUT方法用于上传
文件。
此外
,HTTP协议的请求首部(
Request
—Header)中
Accept
关键字包含一个范围段(
Range)
,利用该关键字
,客户可以向
服务器请求实体中的任何一部分资源
;HTTP协议实体首部
Content
—Length首部域表示发送给接收方的实体主体(
Entity
—
Body)的大小(以字节为单位)
,利用
Content
—Length客户可以
获得将要传输的文件的总长度。如果结合
Accept中的
Range
关键字和实体首部
Content
—Length首部域
,客户就可以实现文
件传输中的断点续传。利用巴科斯范式(
BNF)可以定义
HTTP协议中文件传输的消息格式。由于服务器方的响应消
息由
Web服务器定义
,下面只给出客户方请求消息的部分
BNF定义[7]
:
RequestMessage=HeadMessage|GetMessage
HeadMessage=″
Head″
SPRequest-URISP
Other-information;定义
Head请求消息
GetMessage=″
Get″
SPRequest-URISP;定义接收消息
Request-URI
=″
HTTP://″
Server-Address″
/″
File-Path″
/″
File-Name
Server-Address=IPaddress|DomainName
Other-Information=Version-InformationCRLF
Host-InformationCRLFAccept-Information
CRLFRange-InformationCRLFCRLF;定义请求的辅助信息
Version-Information=″
HTTP/″
HTTPVersionNumber
;HTTP协议的版本号
Host-Information=″
HOST:″
Server-Address
;定义服务器信息
Accept-Information=″
ACCEPT:″″3
/3″
;定义接收信息类型第
21卷第
8期
2001年
8月计算机应用
ComputerApplicationsVol.21,No.8
Aug.,2001
© 1994-2010 China Academic Journal Electronic Publishing House. All rights reserved. http://www.cnki.netRange-Information=″
Range:bytes=″
File-Length
;定义接收的范围
下面是一条完整的
Head请求消息示例
:
Headhttp://202.115.17.212/domino/myfile.ini
Http/1.1\r\nhost:202.115.17.212\r\nAccept:3
/3
\r\n
Rangebytes=1234\r\n\r\n
这条请求的含义是向服务器(
IP地址为
202.115.17.212)
请求
domino目录下的文件
myfile.ini的有关信息
,如果
Web服
务器收到这条请求
,则返回一条应答信息
,其中包含客户请求
文件的长度信息。
一条完整的
Get请求消息示例如下
:
Headhttp://202.115.17.212/domino/myfile.ini
Http/1.1\r\nhost:202.115.17.212\r\nAccept:3
/3
\r\nRan
gebytes=1234\r\n\r\n
这条请求的含义是向服务器(
IP地址为
202.115.17.212)
请求下载
domino目录下的文件
myfile.ini,内容从
1234字节开
始
;如果
Web服务器收到这条请求
,则从客户所请求文件的
1234字节处读取文件内容
,并发送到客户端。
由上分析可见
,HTTP协议中
,可以利用
GET和
PUT方法
从服务器下载文件
,利用
PUT方法可以向服务器上传文件
,
利用
Accept中的
Range关键字和实体首部
Content
—Length首
部域
,可以取得文件的任意内容段
,从而实现文件传输的断点
续传。
3
HTTP协议下文件传输的软件设计与实现
由于
HTTP协议下文件传输只涉及到客户端程序设计
,
因而软件实现不依赖于其他的应用程序
,只与具体的
web服
务器有关(如果
web服务器遵循国际标准的话
,HTTP协议进
行文件传输的客户程序将是完全独立的)。以下以从服务器
下载文件为例说明其设计与实现
,上传文件和该过程类似。
图
2 利用
HTTP协议进行文件下载的过程
图
2是服务器
/客户机发送和接收信息的过程
,以下是该
过程的详细解释
:
A:客户向
Web服务器发送一个
HEAD方法请求
,其中包
含将要下载文件的
URI。
B:Web服务器收到客户的
Head请求后
,向客户响应
,该
响应包含客户请求的文件的长度信息。
C:客户收到服务器的响应后
,从该响应中取出文件的总
长度
,同本地文件比较
,计算出将要传送的文件的偏移值
,将
该信息加载到请求实体中(以
Range关键字给出)
,并发送一
个
GET方法请求到
Web服务器。
D:服务器根据客户的
GET方法请求
,取出文件的偏移
值
,从磁盘或其他物理介质读取文件内容
,并发送到客户端。
E:客户接收数据
,并写到本地文件中
,当出错或者接收
完成
,向服务器发送相应信息
,结束本次文件传送。该软件的逻辑流程图如图
3所示。
此外
,利用
Range关键字和
Content
—Length首部域
,也可
以实现多线程文件传输
,基本方法是将文件内容分为互不相
交的独立分段
,为每一分段建立一个任务
,创建一个线程完成
该任务
;当所有的任务都完成后
,将所有的独立分段组装成完
整的文件写到本地磁盘上。多线程文件传输可以大大提高文
件传输的效率和节约网络带宽
,但系统资源开销很大
,只在传
输速度要求较高的应用中使用。
4 总结
由以上分析可见
,HTTP协议中
,利用
GET和
PUT方法从
服务器下载文件
,利用
PUT方法可以向服务器上传文件
,结
合
Accept中的
Range关键字和实体首部
Content
—Length首部
域实现断点续传和多线程文件传输
,解决了局域网和广域网
中的大文件传输
,提高了传输的效率和节约了网络带宽
;而且
该方案只需客户端应用程序
,可以充分利用
Web服务器的功能完成文件传输。
图
3 利用
HTTP传输文件的流程图
参考文献
[1]
AndrewS.Tanenbaum.ComputerNetworks[M].北京
:清华大学出
版社
,1998.
[2]
RebertL.Kruse.DataStructure&ProgramDesigninC[M].北京
:清
华大学出版社
,1999.
[3]
WillianmStallings.OperatingSystemInternalsandDesignPrinciple
[M].北京
:清华大学出版社
,1998.
[4]
W.RichardStevens.UNIXNetworkProgramming(
Volume1)
[M].北
京
:清华大学出版社
,1998.
[5]
Berners-Lee,R.Fielding,H.Frystyk.HypertextTransferProtocol
--HTTP/1.0[S]/RFC1945,May1996.
[6]
R.Fielding,J.Mogul,H.Frystyk.HypertextTransferProtocol--
HTTP/1.1[S].RFC2068,January1997.
[7] 邹海明
,等
.形式语言、自动机和语法分析
[M].武汉
:华中工学
院出版社
,1985.82 计算机应用2001年