http协议 文件下载原理详解
2009年06月01日 星期一 04:53 P.M.
最近研究了一下关于文件下载的相关内容,觉得还是写些东西记下来比较好。起初只是想研究研究,但后来发现写个可重用性比较高的模块还是很有必要的,我想这也是大多数开发人员的习惯吧。
对于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(超文本传输协议)是互联网上...总结来说,HTTP通信协议的工作原理涉及域名解析、TCP连接建立、HTTP请求发送、服务器处理和响应、资源加载以及连接关闭。理解这一过程对于开发Web应用程序和优化网络性能至关重要。
IPMI V2.0工作原理详解 高性能、可靠的系统常常存在一个缺点:它们通常是利用具有很少或没有互操作性的专有部件生产的。过去,服务器管理依赖于专有工具,而专有工具管理多厂商服务器机柜和刀片服务器非常困难。人们...
2. **.torrent文件**:这是BT协议的元数据文件,包含了关于要下载的文件的信息,如文件大小、文件名、文件块的哈希值,以及Tracker服务器的地址。 3. **Tracker服务器**:它负责协调BT网络中的用户,提供下载者列表...
HTTP协议详解和RFC2616中文版的文档是理解HTTP协议的关键资源。通过深入学习,开发者可以更好地掌握Web通信的原理,从而编写出更高效、更可靠的网络应用。无论是开发Web服务器、前端应用还是后端接口,对HTTP协议的...
### HTTP协议详解(真的很经典) #### 引言 随着互联网技术的发展,HTTP协议作为Web通信的基础,被广泛应用在分布式超媒体信息系统中。自1990年被提出以来,HTTP经历了多个版本的演变,其中HTTP/1.0是当前广泛使用...
这份"HTTP协议详解PDF"文档应该包含对HTTP协议的全面解析,涵盖了其核心概念、工作原理、请求与响应报文结构、状态码、首部字段等内容。 在HTTP协议中,主要有两种类型的操作:GET和POST。GET方法用于获取资源,而...
1. **ZMODEM.DOC**:这可能是一个文档文件,详细介绍了Zmodem协议的工作原理、实现细节以及如何在实际项目中应用Zmodem协议。文档可能涵盖了协议的各个部分,如帧结构、错误处理和会话管理等。 2. **ZMODEM.pdf**:...
《超文本传输协议详解》 超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是互联网上应用最为广泛的一种网络协议,它定义了客户端(浏览器)与服务器之间的通信规范,主要用于传输超媒体信息,如HTML文档...
HTTP协议的工作原理: 1. 请求过程:当用户在浏览器中输入URL并按下回车键时,浏览器作为客户端(Client)构造一个HTTP请求报文,包括方法(GET、POST等)、URL、协议版本、头部信息和请求主体(如果有的话)。然后...
4. **应用层**:这里包含了许多具体的网络应用协议,如HTTP(超文本传输协议)、FTP(文件传输协议)、SMTP(简单邮件传输协议)等。开发者可以利用这些协议编写应用程序,例如Web服务器或邮件客户端。 书中详细...
### 汽车电子A2L文件协议详解 #### 一、引言 A2L文件格式是由ASAM(Automotive Simulation and Measurement Systems Association)组织制定的一种标准文件格式,主要用于汽车电子系统的标定数据交换。它是一种广泛...
HTTP协议广泛应用于网页浏览、文件下载、API交互等场景。其简单、灵活的特性使其成为互联网通信的基石,但同时也因其无状态性导致了一些效率问题,这催生了如HTTP/2、HTTP/3等新版本的出现,以提高性能和安全性。 #...
通过阅读`http&soap.doc`文档和`xml基础.chm`帮助文件,你可以深入了解这些协议的工作原理和XML的基本语法,这将对理解和使用这些技术有很大帮助。学习这些基础知识对于进行Web服务开发、数据交换以及构建分布式系统...
### HTTP协议头详解 HTTP(超文本传输协议)作为互联网应用中最常见的协议之一,其核心功能在于实现客户端与服务器之间的信息交互。本文旨在深入解析HTTP协议的头信息、报文格式以及请求与响应机制,帮助读者更全面...
### HTTP协议的作用原理详解 HTTP(Hypertext Transfer Protocol)是一种用于从Web服务器传输超文本到本地浏览器的应用层协议,其作用原理主要包括三个关键步骤:连接、请求与应答。 #### 1. 连接 在HTTP通信开始...
总结来说,"张孝祥_HTTP协议详解第四讲"深入浅出地讲解了HTTP协议的关键要素,包括其工作原理、请求响应流程、请求方法、版本差异、状态码、安全性和缓存机制。通过这堂课的学习,我们可以更好地理解和应用HTTP协议...
### Http下载原理详解 #### 一、HTTP下载基础概念 HTTP (Hypertext Transfer Protocol) 是互联网上应用最为广泛的一种网络协议,它主要用于规范客户端(如浏览器)与服务器之间的通信方式。HTTP 协议允许客户端从...
LwIP协议栈源码详解是一项对LwIP协议栈源代码进行深度解析和评解的工作,旨在帮助开发者更好地理解和使用LwIP协议栈。LwIP(Light-Weight IP)是一个开源的TCP/IP协议栈实现,专门针对嵌入式系统进行优化,以减少...
总的来说,理解HTTP协议对于Web开发人员至关重要,无论是前端开发者还是后端工程师,都需要掌握HTTP的基本原理和操作方式。这份中英文双语版的HTTP协议详解电子书将为你提供全面深入的学习资料,帮助你更好地理解和...