[CDN 技术] squid对range的处理
转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]
本文链接: http://www.php-oa.com/2009/05/22/squid_range_206.html
在squid中,如果用户有请求range,有二种处理方法
1.给range请求转发给源网站,自己做个代理.多个请求,多次通过squid.
2.给range的请求转成一个完整的请求,下载完整个文件.
第一种好理解,但是第二种就不好理解了.比如,同时有个用户请求这个文件时,会回去源网站几次,会出现什么问题.
经过测试,对同一个文件,多个请求,不同的range时,在第二种模式只会有一个回去源网站,所有另外的用户见到的都是PENDING的状态.日志中会见到206的响应.
例如,
一个用户请求一个4G的文件时,用户下载了从0~2G之间的文件,当有个用户请求从0到1G时,直接给这个文件回复给用户,不回去源.
当用户请求1.5G到4G时,前面0.5G很快,直接从squid回复,后面到了2G以后,就会等第一个用户,第一个用户下载多少,它才能得到多少数据.
Http协议Range域格式
Range头域可以请求实体的一个或者多个子范围.例如,
表示头500个字节:bytes=0-499
表示第二个500字节:bytes=500-999
表示最后500个字节:bytes=-500
表示500字节以后的范围:bytes=500-
第一个和最后一个字节:bytes=0-0,-1
同时指定几个范围:bytes=500-600,601-999
但是服务器可以忽略此请求头,如果GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK).


















