HTTP - 断点续传

原理:

http协议中的断电续传是基于HTTP头Range以及Content-Range。

HTTP头中一般断点下载时才用到Range和Content-Range实体头,Range用户请求头中,指定第一个字节的位置和最后一个字节的位置(eg:Range:200-300或Range:200-);

Content-Range用于响应头。通俗的来讲就是文件大小为10,这次下载了3,被中断了,下次继续下载时将指针移动到3的位置,从3开始下载,最终将整个文件下载下来。

 

简单http下载文件

请求下载整个文件: 
GET /test.rar HTTP/1.1

Connection:close

Host:192.168.95.11

Range:bytes=0-801   //一般请求下载整个文件是bytes=0- 或不用这个头

 

一般正常回应:

HTTP/1.1 200 OK

Content-Length:801

Content-Type:application/octet-stream

Content-Range:bytes 0-800/801      //  801:文件中大小

 

重要的几个头:

响应头:

Content-type:告诉浏览器文件的MIME类型,非常重要,MIME种类繁多。很可能程序中漏掉一些MIME类型,表示全部为content-type:application/otet-stream(字节流)

Content-disposition:是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。当Internet Explorer接收到头时,他会激活文件下载对话框。它的文件名框自动填充了头中制定的文件名。(就是激活弹出提示下载框)。一般这样写:content-disposition:attachment;filename=name

Content-Length:告诉浏览器这个文件的大小,不设置这个头,浏览器也会自己识别

Pragma Cache-control:把这两个头设置为public – 告诉浏览器缓存 – 一般设置cache-control:public

Content-Range:字段说明服务器返回了文件的某个范围及文件的总长度。这时Content-Length字段就不是整个文件的大小,而是对应文件这个范围的字节数。一般格式 – Content-Range:bytes 500-999/1000

 

响应头:

Range:可以请求实体的一个或多个子范围

eg:

  表示头500个字节:bytes=0-499

  表示第二个500字节:bytes=500-999

  表示最后500个字节:bytes=-500

  表示500字节以后的范围:bytes=500-  【下载断点续传(一般range格式为500-)】

  第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(Partial Content)返回而不是以200(OK)。【206表示服务器已经完成GET的部分请求,即表示断点续传】

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值