http协议 文件下载原理详解

最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好。起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧。
对于HTTP协议,向服务器请求某个文件时,只要发送类似如下的请求即可:

GET /Path/FileName HTTP/1.0
Host: www.server.com:80
Accept: */*
User-Agent: GeneralDownloadApplication
Connection: close

每行用一个“回车换行”分隔,末尾再追加一个“回车换行”作为整个请求的结束。

第一行中的GET是HTTP协议支持的方法之一,方法名是大小写敏感的,HTTP协议还支持OPTIONS、HAED、POST、PUT、 DELETE、TRACE、CONNECT等方法,而GET和HEAD这两个方法通常被认为是“安全的”,也就是说任何实现了HTTP协议的服务器程序都会实现这两个方法。对于文件下载功能,GET足矣。GET后面是一个空格,其后紧跟的是要下载的文件从WEB服务器根开始的绝对路径。该路径后又有一个空格,然后是协议名称及协议版本。

除第一行以外,其余行都是HTTP头的字段部分。Host字段表示主机名和端口号,如果端口号是默认的80则可以不写。Accept字段中的*/* 表示接收任何类型的数据。User-Agent表示用户代理,这个字段可有可无,但强烈建议加上,因为它是服务器统计、追踪以及识别客户端的依据。 Connection字段中的close表示使用非持久连接。

关于HTTP协议更多的细节可以参考RFC2616(HTTP 1.1)。因为我只是想通过HTTP协议实现文件下载,所以也只看了一部分,并没有看全。

如果服务器成功收到该请求,并且没有出现任何错误,则会返回类似下面的数据:

HTTP/1.0 200 OK
Content-Length: 13057672
Content-Type: application/octet-stream
Last-Modified: Wed, 10 Oct 2005 00:56:34 GMT
Accept-Ranges: bytes
ETag: "2f38a6cac7cec51:160c"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Wed, 16 Nov 2005 01:57:54 GMT
Connection: close

不用逐一解释,很多东西一看几乎就明白了,只说我们大家都关心内容吧。

第一行是协议名称及版本号,空格后面会有一个三位数的数字,是HTTP协议的响应状态码,200表示成功,OK是对状态码的简短文字描述。状态码共有5类:
1xx属于通知类;
2xx属于成功类;
3xx属于重定向类;
4xx属于客户端错误类;
5xx属于服务端错误类。
对于状态码,相信大家对404应该很熟悉,如果向一个服务器请求一个不存在的文件,就会得到该错误,通常浏览器也会显示类似“HTTP 404 - 未找到文件”这样的错误。Content-Length字段是一个比较重要的字段,它标明了服务器返回数据的长度,这个长度是不包含HTTP头长度的。换句话说,我们的请求中并没有Range字段(后面会说到),表示我们请求的是整个文件,所以Content-Length就是整个文件的大小。其余各字段是一些关于文件和服务器的属性信息。

这段返回数据同样是以最后一行的结束标志(回车换行)和一个额外的回车换行作为结束,即“/r/n/r/n”。而“/r/n/r/n”后面紧接的就是文件的内容了,这样我们就可以找到“/r/n/r/n”,并从它后面的第一个字节开始,源源不断的读取,再写到文件中了。

以上就是通过HTTP协议实现文件下载的全过程。但还不能实现断点续传,而实际上断点续传的实现非常简单,只要在请求中加一个Range字段就可以了。

假如一个文件有1000个字节,那么其范围就是0-999,则:

Range: bytes=500-      表示读取该文件的500-999字节,共500字节。
Range: bytes=500-599   表示读取该文件的500-599字节,共100字节。
Range还有其它几种写法,但上面这两种是最常用的,对于断点续传也足矣了。如果HTTP请求中包含Range字段,那么服务器会返回206(Partial Content),同时HTTP头中也会有一个相应的Content-Range字段,类似下面的格式:
Content-Range: bytes 500-999/1000
Content-Range字段说明服务器返回了文件的某个范围及文件的总长度。这时Content-Length字段就不是整个文件的大小了,而是对应文件这个范围的字节数,这一点一定要注意。

一切好像基本上没有什么问题了,本来我也是这么认为的,但事实并非如此。如果我们请求的文件的URL是类似http://www.server.com/filename.exe这样的文件,则不会有问题。但是很多软件下载网站的文件下载链接都是通过程序重定向的,比如pchome的ACDSee的HTTP下载地址是:

http://download.pchome.net/php/tdownload2.php?sid=5547&url=/multimedia/viewer/acdc31sr1b051007.exe&svr=1&typ=0

这种地址并没有直接标识文件的位置,而是通过程序进行了重定向。如果向服务器请求这样的URL,服务器就会返回302(Moved Temporarily),意思就是需要重定向,同时在HTTP头中会包含一个Location字段,Location字段的值就是重定向后的目的 URL。这时就需要断开当前的连接,而向这个重定向后的服务器发请求。

     好了,原理基本上就是这些了。其实装个Sniffer好好分析一下,很容易就可以分析出来的。不过NetAnts也帮了我一些忙,它的文件下载日志对开发人员还是很有帮助的。

本文引自:http://hi.baidu.com/chinessnetstone/blog/item/603d20094009468ad0581b23.html

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: TCP/IP协议指传输控制协议/因特网协议,是互联网的核心协议之一。这种协议提供了一个网络协议栈,用于传输数据包并确保它们完整地在计算机网络中传输。TCP/IP协议包括了四个层次:应用层、传输层、网络层以及数据链路层。TCP/IP是用于连接到因特网的主要网络协议之一,是因特网的核心协议,它可以很好地支持各种不同的网络应用程序。 TCP/IP协议详解是一份涵盖TCP/IP所有内容的PDF文档,包括TCP/IP协议的工作原理原理和基本知识,提供了完整的TCP/IP协议的技术细节。文档从网络通信开发的基础知识开始,逐步介绍了TCP/IP协议的基础, 包括:物理层、数据链路层、网络层、传输层和应用层,同时也对各种协议和技术如ARP、IP、TCP、UDP、DNS、HTTP、FTP等进行了具体的解释,使读者能够更好地理解TCP/IP协议的技术内容。 总的来说,TCP/IP协议详解是一份非常有用的技术文档,它为开发人员、系统管理员以及网络工程师提供了完善的TCP/IP知识和基础,是网络通信开发不可缺少的参考文档,在今天互联网极为发达的背景下,值得深入学习和掌握。 ### 回答2: TCP/IP协议是计算机网络中常用的协议,它把数据分为若干个分组在网络中传输。对于网络系统的规划、安装、实施、使用和管理,了解TCP/IP协议是十分必要的。TCP/IP协议详解是一本对于TCP/IP协议的解释和深入说明的著作,对于网络从业人员、计算机科学学生,以及计算机爱好者来说都是一本非常好的参考书。 这本书包括了TCP/IP协议的基本概念、网络层、传输层以及应用层等方面的内容,其中涵盖了TCP协议和IP协议的历史、原理、实现和应用。阅读这本书,读者能深入理解网络各层级的协议服务以及它们之间的关系。 此外,本书还介绍了TCP/IP协议在局域网、广域网、因特网和移动网络之间的应用,包括主机地址、路由器、网关等基础设施的配置和管理. 如果您想以更深入的角度了解TCP/IP协议,这本书是不二之选。而且该PDF文件的下载也很容易,只需要在互联网上搜索即可找到,下载后可以离线阅读,方便学习和查阅。 ### 回答3: TCP/IP是Internet的基础协议,而TCP/IP协议详解则是系统地介绍了TCP/IP协议,对于理解和掌握TCP/IP协议体系结构、各个协议的功能、通信流程以及实现方法等相关知识是非常必要的。 TCP/IP协议详解这本书从简单到复杂,从底层实现到应用层的协议,详尽地介绍了各种协议的功能、特点和使用方法,并提供了大量的实例和应用场景,以便读者可以很好地理解协议的整体结构和各个模块之间的关系。 本书介绍了TCP/IP协议协议栈(TCP/IP协议族中标准的网络层和传输层协议)和其他重要的应用层协议,如DNS、SMTP、HTTP等。并通过分析各种协议的特点、功能、应用场景等来帮助读者更好地理解协议的使用方法和实现原理。 此外,本书还介绍了TCP/IP协议的演变历程、一些常见网络问题及其排除方法、网络性能优化等方面的内容,使得读者准确理解TCP/IP协议,并且能够灵活地使用它们,从而帮助读者更好地了解和应用网络。 总之,TCP/IP协议详解这本书是一本非常权威、全面、详尽的TCP/IP教材,对于网络管理员和网络从业人员来说,是一本不可多得的优秀参考书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值