文件下载过程中被暂停或中断,恢复下载时如果重新下载整个文件,会消耗额外的网络流量及时间.断点续传,可以按照Client的需求,对文件进行分段下载,返回Client需要的文件内容,节省流量与时间.断点续传在 HTTP/1.1 (RFC2616)中得到支持.HTTP/1.0不支持断点续传.

当然,使用PHP做下载并不太好,这里仅做为讨论。

下面以resumedownload.txt纯文本为例,内容如下:

1.Client:

在请求的http header中添加 Range: bytes=3-9表明需要获取文件的哪一个片段,值得注意的是,Range bytes是从0开始计数的,也就是说Range: bytes=0-0 表示请求第一个byte,即”1″

2.Server:

在响应的http header中添加HTTP/1.1 206 Partial Content,表明输出的为文件片段(partial就是部分,局部的意思!),

在响应的http header中添加Content-Range: bytes 0-9/10,表明输出的是哪一片段的文件.(其中0表示起始位置,9表示终止位置,最后面的10表示整个文件的大小)

下面是php实现(Github ResumeDownload):

 

Related Posts

发表评论