range_offset_limit

range request comes from a client that wants only some subset of an HTTP response. They are sometimes used to resume a failed transfer of a large file. Squid isn't yet able to cache partial responses and thus must make a decision when forwarding a range request: either remove the Range header or leave it in.

If Squid leaves the Range header in, the origin server sends only the subset that the client wants, and the client receives the response immediately. However, this partial response isn't cached.

On the other hand, if Squid removes the header before forwarding, it receives the entire response, which may be cached. Squid is then responsible for ensuring that the client receives only the subset it needs. The origin server may send a lot of data the client doesn't want. Depending on the speed of your connection, the client may be forced to wait a long time until its range is available.

If the beginning of the requested range is larger than the range_offset_limit value, Squid forwards the Range header and doesn't cache the response. Setting range_offset_limit to 0 causes Squid to always forward the Range header (the default). Setting it to -1 causes Squid to never forward the header.

Syntax

range_offset_limit size-specification

Default

range_offset_limit 0 KB

Example

range_offset_limit 100 KB

问答:

> Range headers - from my understanding, it looks like they use this for 
> video streaming.. it looks like the client can request a part of the object 
> body to be sent alone to him. Is it correct? In this case, if multiple 
> ranges are requested, is it sent separately or in a consolidated manner?

I'm not sure what your use case is, but I've been playing with youtube 
caching lately, and range headers play a part in trying to cache 
client requests.

Squid won't cache range header requests for specific byte ranges. 
However, squid can accept range headers from client and discard them 
when sending upstream.

range_offset_limit -1 [<optional_acl>]

will do the job.  I use an ACL to only apply it to specific domains I 
want the behaviour for.

Squid will serve the client the correct bytes, but by discarding the 
range headers for the upstream retrieval, it will cache the whole 
object and subsequent range requests for the cached object will result 
in a hit.

Parallel simultaneous requests to the same object with a range header 
will likely result in parallel, full retrieval of the whole file 
though (I say likely as I havn't tested but suspect that will be the 
case).

A related behaviour on youtube specifically (and possibly others) is 
the use of '&range=X-Y' URL parameters instead of range header 
requests.  I've noticed this more on web-browsers on PCs, whereas I've 
seen the range header requests on Apple IOS mobile platforms.

There have been some clever tricks using storeurlrewrite or storeid to 
include the range bytes in the key of the object stored, so without 
the use of range_offset_limit, squid can store an object per unique 
client range request & provide a hit for subsequent requests.  My 
testing has indicated this is unreliable as the byte-ranges tend to be 
dynamic based on the clients current bitrates so off-by-one range 
requests result in a lot of duplication in the cache.

You can also utilise an ICAP server to do even funkier stuff like 
mould range URL parameters into range header requests so the different 
client behaviours share the same cache objects.

以上摘自国外网站上的一些阐述和问答。

首先要明确的是squid是不会缓存partial content的,我们要做的是在文件未完整缓存的情况下如何处理回源请求。

组合配置:

range_offset_limit 10 MB  #超出此值将forward range header,否则去掉range
quick_abort_min 10 MB   #小于此值将继续从源服务器完成下载
quick_abort_max 50 MB    #超出此值将放弃从源服务器下载
quick_abort_pct 95     #进度超出此值将继续从源服务器完成下载

以上配置需要根据业务需求和统计数据合理设置。

squid对http range的处理以及range_offset_limit的更多相关文章

  1. squid源码安装下的conf文件默认值和提示

    #    WELCOME TO SQUID 3.0.STABLE26#    ----------------------------##    This is the default Squid c ...

  2. [转]Squid中的日志出现TCP_CLIENT_REFRESH_MISS的问题排除

    转自:http://www.php-oa.com/2008/07/15/tcp_client_refresh_miss.html 今天检查Squid发现大量的日志出现TCP_CLIENT_REFRES ...

  3. CDN网络(二)之配置和优化CDN核心缓存软件--squid

    前言 squid是众多CDN厂商使用的核心缓存软件,都在已有的基础上进行二次开发.在部署squid的时候,建议遵循下面的规范. 1. 使用大内存服务器 对于热点文件,我们让squid用内存缓存,这样大 ...

  4. Squid代理服务器

    缓存代理概述:做为应用层的代理服务软件,squid主要提供缓存加速,应用层过滤控制的功能. 1.代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有 ...

  5. squid代理服务器配置详解

    root@proxy squid]# cat squid.conf## Recommended minimum configuration:#visible_hostname www.jd.com # ...

  6. Squid configuration directives 3.0

    WELCOME TO SQUID 3.0.STABLE25-20100412 ---------------------------- This is the default Squid config ...

  7. squid 学习笔记

    Squid学习笔记 1.安装前的配置 编译安装之前需要校正的参数主要包括File Descriptor和Mbuf Clusters. 1.File Descriptor 查看文件描述符的限制数目: u ...

  8. 交叉编译php5,、nginx、squid方法

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 交叉编译php5 软件版本:php-5.4.27 依赖库:zlib,libxml2 交叉编译器:arm-hisi ...

  9. varnish与squid缓存效率对比实例

    前提:安装varnish.squid.webbench(压测工具) 注:varnish和squid机都未安装其他多余服务,服务器绑定域名为www.dannylinux.top  (为同一台服务器,测试 ...

随机推荐

  1. unity,如何手动或者使用代码更换材质

    在unity中,我们可能需要更换怪物的贴图,来达到以下效果 方法1:手动配置 找到自己配置好的扩展名为.mat的文件,在怪物的节点找到带Mesh Render的子元素,将其拖放到如图位置 方法2:代码 ...

  2. form前台提交List<Object>对象以及后台处理

    页面: <form method="post" action="test.do" id="form"> <input ty ...

  3. ES6 随记(3.2)-- 正则的拓展 & 数值的拓展

    上一章请见: 1. ES6 随记(1)-- let 与 const 2. ES6 随记(2)-- 解构赋值 3. ES6 随记(3.1)-- 字符串的拓展 4. 拓展 b. 正则的拓展 首先又是关于 ...

  4. Saltstack 命令行:批量覆盖指定文件

    master指定文件,覆盖到所有minion命令 salt-cp '*' /etc/hosts /etc/ -------------------------------------------- { ...

  5. jQuery图片分组切换焦点图

    在线演示 本地下载

  6. Oracle函数如何把符串装换为小写的格式

    我们都知道Oracle函数在实际的应用中比较广泛,对其的实际操作与其相关功能也是颇为熟悉,但是你了解Oracle函数怎样使将字符串装换为小写的格式的具体操作吗?如果你有兴趣的话你就可以浏览以下的文章. ...

  7. 混合开发的大趋势之一React Native之Image (脑动理解)

    文章是宝宝自己写的,你可以转走,标明哪来的就行王亟亟的大牛之路 国庆这些天要么旅游要么WOW,感觉整个人都废了.. 直接从黄种人晒成了非洲大酋长..然而还是无橙,这礼拜要做7天,昨天把单元测试的东西整 ...

  8. LeetCode——Construct the Rectangle

    LeetCode--Construct the Rectangle Question For a web developer, it is very important to know how to ...

  9. Linux 利用管道父子进程间传递数据

    [原文] fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝.具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务. 返回值正常为子进程ID,出错返 ...

  10. RabbitMQ初体验

    这里官方使用的Pom是4.0.2版本 <dependencies> <dependency> <groupId>com.rabbitmq</groupId&g ...