当前位置:文档之家› 文件传输协议分析及应用

文件传输协议分析及应用

© 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年

相关主题