http下载原理

下载如何实现的断点续传

1.假设服务器域名为www.test/down.zip,文件名为down.zip。

2.请求报文

get /down.zip http/ 1.1
accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-
excel, application/msword, application/vnd.ms-powerpoint, */*
accept-language: zh-cn
accept-encoding: gzip, deflate
user-agent: mozilla/ 4.0  (compatible; msie  5.01 ; windows nt  5.0 )
connection: keep-alive

3.服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下:

content-length= 106786028
accept-ranges=bytes
date=mon,  30  apr  2001  12 : 56 : 11  gmt
etag=w/ "02ca57e173c11:95b"
content-type=application/octet-stream
server=microsoft-iis/ 5.0
last-modified=mon,  30  apr  2001  12 : 56 : 11  gmt

4.下载过程中出现网络中断

  • 当用户希望恢复下载时,客户端向服务器发送带有 Range 头部的 HTTP 请求。
  • Range 头部指定了客户端希望从哪个字节开始继续下载。通常格式为 "Range: bytes=start-end",其中 start 表示起始字节位置,end 表示结束字节位置。如果 end 未指定,表示从 start 到文件末尾的所有内容。
  • 例如,Range 头部可以是 "Range: bytes=5000-",表示从文件的第 5001 个字节(从 0 开始计数)开始继续下载。
get /down.zip http/ 1.0
user-agent: netfox
range: bytes= 5000 -
accept: text/html, image/gif, image/jpeg, *; q=. 2 , */*; q=. 2

5.服务器处理断点续传请求:

  • 服务器收到带有 Range 头部的请求后,会根据 Range 头部指定的范围,只返回该范围内的文件内容。
  • 服务器响应的状态码通常为 206 Partial Content,表示服务器成功处理了部分 GET 请求。
  • 服务器返回的响应中包含实际返回的文件内容以及其他相关信息。
HTTP/1.1 206 Partial Content
Date: Mon, 22 Feb 2024 12:00:00 GMT
Server: Apache
Last-Modified: Sun, 21 Feb 2024 12:00:00 GMT
Content-Length: 10000
Content-Range: bytes 5000-14999/20000
Content-Type: application/octet-stream

[文件内容,从第5001个字节到第15000个字节]

 

6.客户端继续下载

  • 客户端接收到服务器的响应后,将继续从断点处开始接收文件内容,并将其写入本地文件。
  • 客户端会持续接收直到文件下载完成或者再次中断。

注针对浏览器默认实现了现在的断点续传,下载带上了range 分段获取 ,如果使用java代码或者c++下载要实现此功能就要按照http协议按照以上流程实现

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章