HTTP断点续传

来源:互联网 发布:java qq登录 编辑:程序博客网 时间:2024/05/02 06:10

在以前版本的HTTP SERVER也是不支持断点的,HTTP/1.1开始就支持了,具体如下:

在HTTP请求的头部信息里面,通常是这样的:

  "GET /file/testfile/ HTTP/1.1\r\n"(路径名、文件名)
  "Host: 172.1.2.3\r\n"(服务器主机)
  "Content-Type: text/xml; charset=\"utf-8\"\r\n"
  "User-Agent: ZTEHttpClient/3.0.1 neon/0.25.1\r\n"
  "Keep-Alive: \r\n"
  "Connection: TE, Keep-Alive\r\n"
  "RANGE: bytes=1734924-\r\n" (从断点处续传)
  "TE: trailers\r\n\r\n";(最后以'\r\n\r\n'结束)

服务器返回的信息如下:

read from http server:HTTP/1.1 206 Partial Content
Content-Type: application/octet-stream
Content-Range: bytes 1734924-12335564/12335565 (从1734924字节处开始续传)
Content-Length: 10600641 (12335564 - 1734924)长度
Accept-Ranges: bytes
Server: HFS 2.2
Content-Disposition: attachment; filename="testfile";
Last-Modified: Mon, 03 Dec 2012 07:48:58 GMT

上面是HTTP请求头的主要内容,是浏览器等客户端发给HTTP SERVER的信息。(注:信息下面紧着着就是要请求的数据了,所以每次从服务器接收数据前都要读完服务器发送的信息,并且以字节方式读取,读到'\r\n\r\n'为止,这表示消息的结尾)
在这个请求头里面,第一行叫做Request Line,GET叫做请求方法(通常得到一个HTML页面都是用GET,CGI等请求是用POST,/file/testfile是要请求的绝对路径的文件名,也可以是一个URL地址,HTTP/1.1为版本号,每行要以'\r\n'结束。
172.1.2.3就是HTTP服务器的IP地址。

要做断点续传,浏览器等客户端需要在请求头里面发送
Range: bytes=1734924-
这样的请求,就是告诉HTTP SERVER,这个文件要从1734924字节开始传送。


最后一点,大家看了上面的描述可能会有一个问题,那么多点传送怎么做呢?那就是多起几个线程,连接到服务器,用断点指令来传送文件,在传送的过程 中,会检查前面的(比如说第一个蚂蚁)得到的文件的部分是否超过了后面的(比如说第二个蚂蚁)的起点,相等就停前面的蚂蚁,最后再合并几个部分,就得到一 个完整的文件了