java mvc 断点续传_用SpringMVC 实现断点续传 (HTTP)
一、概述
所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。
二、Range
用于请求头中,指定第一个字节的位置和最后一个字节的位置,一般格式:
Range:用于客户端到服务端的请求,可以通过改字段指定下载文件的某一段大小及其单位,字节偏移从0开始。典型格式:
Ranges: (unit=first byte pos)-[last byte pos]
Ranges: bytes=4000- 下载从第4000字节开始到文件结束部分
Ranges: bytes=0~N 下载第0-N字节范围的内容
Ranges: bytes=M-N 下载第M-N字节范围的内容
Ranges: bytes=-N 下载最后N字节内容
1.以下几点需要注意:
(1)这个数据区间是个闭合区间,起始值是0,所以“Range: bytes=0-1”这样一个请求实际上是在请求开头的2个字节。
(2)“Range: bytes=-200”,它不是表示请求文件开始位置的201个字节,而是表示要请求文件结尾处的200个字节。
(3)如果last byte pos小于first byte pos,那么这个Range请求就是无效请求,server需要忽略这个Range请求,然后回应一个200,把整个文件发给client。
(4)如果last byte pos大于等于文件长度,那么这个Range请求被认为是不能满足的,server需要回应一个416,Requested range not satisfiable。
2.示例解释:
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
三、Content-Range
用于响应头,指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:
Content-Range: bytes (unit first byte pos) - [last byte pos]/[entity legth]
四、Header示例
请求下载整个文件:
GET /test.rar HTTP/1.1
Connection: close
Host: 116.1.219.219
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:文件总大小
一个最简单的断点续传实现大概如下:
1.客户端下载一个1024K的文件,已经下载了其中512K
2. 网络中断,客户端请求续传,因此需要在HTTP头中申明本次需要续传的片段:
Range:bytes=512000-
这个头通知服务端从文件的512K位置开始传输文件
3. 服务端收到断点续传请求,从文件的512K位置开始传输,并且在HTTP头中增加:
Content-Range:bytes 512000-/1024000
并且此时服务端返回的HTTP状态码应该是206,而不是200。
但是在实际场景中,会出现一种情况,即在终端发起续传请求时,URL对应的文件内容在服务端已经发生变化,此时续传的数据肯定是错误的。如何解决这个问题了?显然此时我们需要有一个标识文件唯一性的方法。在RFC2616中也有相应的定义,比如实现Last-Modified来标识文件的最后修改时间,这样即可判断出续传文件时是否已经发生过改动。同时RFC2616中还定义有一个ETag的头,可以使用ETag头来放置文件的唯一标识,比如文件的MD5值。
终端在发起续传请求时应该在HTTP头中申明If-Match 或者If-Modified-Since 字段,帮助服务端判别文件变化。
另外RFC2616中同时定义有一个If-Range头,终端如果在续传是使用If-Range。If-Range中的内容可以为最初收到的ETag头或者是Last-Modfied中的最后修改时候。服务端在收到续传请求时,通过If-Range中的内容进行校验,校验一致时返回206的续传回应,不一致时服务端则返回200回应,回应的内容为新的文件的全部数据。
java mvc 断点续传_用SpringMVC 实现断点续传 (HTTP)相关推荐
- java mvc学习_史上最全的SpringMVC学习笔记
一.SpringMVC基础入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 springmvc o ...
- java mvc 菜鸟_【java框架】SpringMVC(1)--SpringMVC入门
1. SpringMVC框架认识 Spring MVC是一个基于MVC模式的Web框架,SpringMVC作为Spring中的一个模块,它与Spring能够无缝集成,主要用于解决企业Web开发中常见的 ...
- java converter转换器_在SpringMVC中设置自定义类型转换器Converter
前言 在SpringMVC中为我们提供了许多内置的类型转换器,当我们在HTML表单中发起一个请求时,Spring会根据表单项中name属性的值映射到POJO的属性名,调用相对性属性的set方法帮我们把 ...
- java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数
在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数. 我只是使用@RequestParameter("name"). 但是我可以对request属性做同样的事情吗? ...
- java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
原标题:JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码) JavaEE体系结构包括四层,从上到下分别是应用层.Web层.业务层.持久层.Struts和SpringMVC是Web层的 ...
- Java MVC框架性能比较 jsp、struts1、struts2、springmvc3 (转帖)
为什么80%的码农都做不了架构师?>>> Java MVC框架性能比较 jsp.struts1.struts2.springmvc3 现在各种MVC框架很多,各框架的优缺点网络 ...
- Java MVC框架性能比较
Java MVC框架性能比较 - by zvane 现在各种MVC框架很多,各框架的优缺点网络上也有很多的参考文章,但介绍各框架性能方面差别的文章却不多,本人在项目开发中,感觉到采用了struts2框 ...
- 关于java的毕业设计_我的java毕业设计之路回顾
我的java毕业设计之路回顾 大宇大学毕业现已四个月了,这四个月有懒散的时分,有尽力的时分.回忆自己走过的路,只要java毕业设计最能浓缩我的所学.我早就有这个计划:把自己的毕业设计与咱们共享,但一向 ...
- java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计
java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 [源码请到资源专栏下载] 今天分享的项目是<ssm多用户博客个人网站> 该项目分为2个角色,管理员和用户. 用户可 ...
最新文章
- 日常SQL常见问题(二)
- 请求分页算法 Python实现
- python sendline_python Pexpect模块的使用
- androidStudio快捷键概览
- nodejs的koa中cookie和session的使用,cookie和session的区别
- ENVI入门系列教程---二、图像分析---13. 遥感动态监测
- Windows控制台cmd默认代码页修改的办法【GBK、UTF-8】
- 计算机病毒是指______.,计算机病毒是指
- 大学新颖的软件测试毕业论文题目50例
- PDF文档无法注释或高亮的解决办法
- python查询12306余票_【python】用GUI编写一个12306余票查询的系统,附源码
- 一对一直播app源码开发的前端实现
- 并发编程——ConcurrentHashMap#transfer() 扩容逐行分析
- 工作站的容器化和虚拟化实践
- 孢子社群:今日推荐ARVR微信群:游乐VR智能
- jQuery基础--使用jQuery美化英雄联盟简介页
- Win10显示器驱动程序无法启动
- 安装RHEL7.5超详细教程
- 又一年没有中国队的世界杯,你还会熬夜打call吗?网友的回答亮了
- 【Python】Python 注释 ( 单行注释 | 多行注释 | 代码示例 )
热门文章
- win下手工启停数据库
- jdbc中如何实现模糊查询
- Devexpress GridControl 设置combobox下拉框
- C# 平时碰见的问题【1】
- 关于“让我们基于Node.js创建一个Web应用:记事本(三)”
- 意法半导体STM32 ARM Cortex 32位微控制器
- 详解Python开发的发展方向及其对应的薪资!
- matlab电话拨号音的合成与识别代码,实验报告 电话拨号音的合成与识别
- 不干胶标贴打印模板下载_A4纸打印17*6的不干胶标签打印模板如何设置
- Andriod anim rotate中的属性介绍