随笔 - 0, 文章 - 264, 评论 - 170, 引用 - 0

导航

<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

留言簿(6)

随笔分类

文章分类

文章档案

AI

android+移动开发

apache等开源类包,工具相关

cdn

concurrent

C语言

git、svn等工具使用

groovy、grails

Hadoop、Storm、Spark大数据相关

hibernate、JPA等持久化技术

html,dom,js,css、ext、mui等前端、移动前端相关

HTTP、HTTPS、TCP、UDP等协议相关

IM、openfire

Java基础

java性能优化

jquery

linux相关

lucene、solr等搜索技术相关

maven gradle ant Jenkins自动化构建与持续集成

memcache

mongodb

nginx、squid、haproxy、varnish

OLAP

python、shell、perl、php

redis

rmi相关

spring

struts、webwork

tcp/ip

tomcat,jsp,servlet相关

velocity等实用工具相关

业务相关

互联网安全、过滤、网络

修炼

其他

区块链

压力、性能测试相关

地图相关

基础

多线程

开发工具相关

数据库

架构

移动互联网

设计模式

搜索

  •  

最新评论

HTTP/1.1 Range和Content-Range(注:转载于http://www.91linux.com/html/article/program/cpp/20090411/16420.html)

    假设你要开发一个多线程下载工具,你会自然的想到把文件分割成多个部分,比如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

posted on 2010-09-16 15:33 小一败涂地 阅读(7391) 评论(0)  编辑  收藏 所属分类: http相关


只有注册用户登录后才能发表评论。


网站导航: