假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分,比如4个部分,然后创建4个线程,每个线程负责下载一个部分,如果文件大小为403个byte,那么你的分割方式可以为:0-99 (前100个字节),100-199(第二个100字节),200-299(第三个100字节),300-402(最后103个字节)。
分割完成,每个线程都明白自己的任务,比如线程3的任务是负责下载200-299这部分文件,现在的问题是:线程3发送一个什么样的请求报文,才能够保证只请求文件的200-299字节,而不会干扰其他线程的任务。这时,我们可以使用HTTP1.1的Range头。Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的:
表示头500个字节:Range: bytes=0-499
表示第二个500字节:Range: bytes=500-999
表示最后500个字节:Range: bytes=-500
表示500字节以后的范围:Range: bytes=500-
第一个和最后一个字节:Range: bytes=0-0,-1
同时指定几个范围:Range: bytes=500-600,601-999
所以,线程3发送的请求报文必须有这一行:
Range: bytes=200-299
服务器接收到线程3的请求报文,发现这是一个带有Range头的GET请求,如果一切正常,服务器的响应报文会有下面这行:
HTTP/1.1 206 OK
表示处理请求成功,响应报文还有这一行
Content-Range: bytes 200-299/403
斜杠后面的403表示文件的大小,通常Content-Range的用法为:
. The first 500 bytes:
Content-Range: bytes 0-499/1234
. The second 500 bytes:
Content-Range: bytes 500-999/1234
. All except for the first 500 bytes:
Content-Range: bytes 500-1233/1234
. The last 500 bytes:
Content-Range: bytes 734-1233/1234
分享到:
相关推荐
超文本传输协议(HTTP,Hypertext Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它的1.1版本(HTTP/1.1)是目前最常用的标准,它在RFC 2068的基础上进行了修订和完善。这个文档,"HTTP/1.1中文文档...
HTTP/1.1推荐使用UTF-8作为默认字符集,并允许通过`Content-Type`头部字段显式指定字符集。 ##### 5.5 内容编码 内容编码用于压缩或转换消息体数据,常见的编码方式有gzip、compress、deflate等。 ##### 5.6 转移...
http范围根据 HTTP/1.1 规范,用于和 HTTP 标头字段的 Node.js 解析器。安装$ npm install http-range用法 var ContentRange = require ( 'http-range' ) . ContentRange ;var Range = require ( 'http-range' ) . ...
HTTP/1.1是HTTP协议的第1.1个版本,是RFC 2068的升级版,旨在解决HTTP/1.0存在的问题,如分层代理、高速缓存管理、稳定连接和虚拟主机支持等。HTTP/1.1引入了更多功能和优化,以适应不断发展的互联网需求。 ...
- HTTP/1.1支持通过`Content-Encoding`头字段进行数据压缩,如gzip或deflate,减少传输的数据量。 10. **内容编码**: - 通过`Transfer-Encoding`头字段,如`chunked`编码,允许分块传输,解决内容长度未知时的...
HTTP/1.1是HTTP协议的第1.1个主要版本,它在HTTP/1.0的基础上进行了诸多改进,以提高性能和效率,同时引入了更多功能。 ### HTTP/1.1的主要特点 1. **持久连接(Persistent Connections)**:HTTP/1.1默认支持持久...
### HTTP 1.1 协议规范中文归纳 #### 一、引言 HTTP (Hypertext Transfer Protocol) ...以上是对HTTP 1.1协议规范的一些基本概念和技术细节的中文归纳总结。理解这些概念对于深入学习HTTP协议及其实现具有重要意义。
这个模块是基于HTTP(超文本传输协议)1.1版本构建的,HTTP 1.1是互联网上应用最为广泛的一种网络协议,它定义了浏览器和服务器之间如何交换信息。下面将详细解释HTTP访问模块1.1的相关知识点。 1. **HTTP协议基础*...
rfc7230:HTTP/1.1 Message ...rfc7231:HTTP/1.1 Semantics and Content rfc7232:HTTP/1.1 Conditional Requests rfc7233:HTTP/1.1 Range Requests rfc7234:HTTP/1.1 Caching rfc7235:HTTP/1.1 Authentication
HTTP/1.1 还引入了更多优化,如Chunked编码用于处理大文件传输,以及支持范围请求(Range Requests),允许客户端请求文件的部分内容。 总结来说,HTTP/1.1 RFC2096是HTTP协议的增强版本,它通过持久连接、管线化和...
通过以上的介绍可以看出,在Java中实现文件的断点续传相对较为简单,主要依靠HTTP协议的Range请求和Java自身的网络及文件I/O能力。开发者需要注意的是,除了技术实现外,还需要考虑异常处理和资源释放等细节问题,以...
- **206 Partial Content**:客户端发送了带有`Range`头部的GET请求,服务器提供了请求范围内的部分内容。这是HTTP 1.1新增的状态码。 #### 3xx - 重定向响应 - **300 Multiple Choices**:请求的资源可在多个位置...
一般断点下载时才用到 Range 和 Content-Range 实体头。 不使用断点续传 get /down.zip http/1.1 accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, ...
在这个请求中,"GET"表示请求类型,"/path"是请求的资源路径,"HTTP/1.1"是使用的HTTP版本,"Host"指定服务器地址,其他头部字段提供了客户端信息和接收数据的偏好。 使用Socket实现HTTP下载,首先要创建一个Socket...
HTTP1.1允许客户端通过Range头指定需要的部分数据,这对于断点续传和多媒体播放等场景特别有用。 9. Host头域: HTTP1.1引入Host头,允许在一个IP地址上运行多个虚拟主机,极大地推动了互联网服务的部署和扩展。 ...
Content-Range: bytes 2000070-106786027/106786028 Date: Mon, 30 Apr 2001 12:55:20 GMT ETag: W/"02ca57e173c11:95b" Content-Type: application/octet-stream Server: Microsoft-IIS/5.0 Last-Modified: Mon, 30...
- HTTP/1.1引入了新的状态码和头部字段,如307(临时重定向)、100-continue等,提高了协议的灵活性和可扩展性。 - HTTP/1.1中对缓存机制进行了增强,使得客户端可以更高效地利用缓存数据。 #### 下载软件的设计...
HTTP / 1.1是HTTP协议的一个重要版本,它对早期的HTTP / 1.0进行了多方面的改进和增强,定义在RFC 2616文档中。这个版本在1999年发布,是对RFC 2068的更新,旨在解决1.0版本中的一些问题并增加新功能。 HTTP / 1.1...
通过上述分析可知,利用HTTP协议实现断点续传的关键在于正确地使用`Range`请求头以及处理服务器返回的`Content-Range`响应头。这种方法不仅提高了文件传输的效率,还增强了用户体验。对于开发人员来说,掌握这一技术...
"Accept"表示客户端接受的数据类型,"Host"指明请求的服务器地址,"Range"用于请求特定范围的内容,"Connection"可以指定是否保持连接,"Date"记录报文创建的时间,"Server"是服务器标识,"Content-Type"定义消息...