squid对http range的处理以及range_offset_limit

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     #进度超出此值将继续从源服务器完成下载

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

时间: 2024-11-07 05:33:14

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

Centos7 squid安装与配置

安装squid yum install -y squid 安装httpd(用于后面生成密码文件) yum install -y httpd 或者 yum install httpd-tools -y 配置文件 /etc/squid/squid.conf vim /etc/squid/squid.conf 修改以下信息 http_port 3128 # 这里是端口号,可以按需修改 # 下面这样写会同时监听ipv6和ipv4的端口 # http_port 0.0.0.0:3128 #默认的配置只能允

Linux下Squid正向/反向代理配置

Squid是一个支持HTTP, HTTPS, FTP的web缓存代理,它能通过缓存和反复使用频繁访问的网页来减少带宽.提高响应速度.Squid被广泛用于访问控制和做前端加速,它能运行在大部分操作系统平台上,Squid能减少服务器的压力,提高客户端的响应速度,其高级的内容路由配置允许建立集群和负载均衡来处理各种WEB请求,3.2及之后的版本基本都已支持SMP和多CPU 应用场景: 1.正向代理 Squid被数以百计的网络提供商用来为他们的用户提供最好的网页访问,为了提升性能和常用内容来减少带宽sq

squid access.log中Squid返回给客户端的结果编码

TCP_HIT Squid发现请求资源的貌似新鲜的拷贝,并将其立即发送到客户端. TCP_MISS Squid没有请求资源的cache拷贝. TCP_REFERSH_HIT Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器.原始服务器返回304(未修改)响应,指示squid的拷贝仍旧是新鲜的. TCP_REF_FAIL_HIT Squid发现请求资源的貌似陈旧的拷贝,并发送确认请求到原始服务器.然而,原始服务器响应失败,或者返回的响应Squid不能理解.在此情形下,squid发

Squid代理服务器

缓存代理概述:做为应用层的代理服务软件,squid主要提供缓存加速,应用层过滤控制的功能. 1.代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存,如果缓存中已经有客户机需要的页面,则直接将缓存中的页面内容反馈给客户机,如果缓存中没有客户机要访问的页面,则由代理服务器向Internet发送访问请求,当获得返回的web页面以后,将网页数据保存到缓存中并发送给客户机!如图 HTTP代理缓存加速对象主要是文字,图像等静态web元素.使用缓存机制后,当客户机在不同的时

Squid configuration directives 3.0

WELCOME TO SQUID 3.0.STABLE25-20100412 ---------------------------- This is the default Squid configuration file. You may wish to look at the Squid home page (http://www.squid-cache.org/) for the FAQ and other documentation. The default Squid config

基于iptables+squid web缓存服务

小型企业的一般互联网宽带接入比较差的.公共上网带宽也不很充足的,再加上有一些下载或都视频流,对于web浏览将有严重的影响的.可能听过各种网络慢的声音. 在以上的基本目标下,准备使用squid做透明代理,这样在用户不用改变任何的配置情况下,将有一定的网络浏览速度的提升的. 基本系统: Centos 6.7 内核:2.6.32.547 双网卡 iptables 1.4.7 squid 3.5.15 开始安装配置 yum install -y gcc make 软件存放路径:/usr/local/sr

squid配置文件

acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl localnet src 10.0.0.0/8     # RFC1918 possible internal network acl localnet src 172.16.0.0/12  # RFC1918 possible internal network

squid 正向代理

有时候我们的机器处于内网环境中,无法直接访问外网.如果此时有机器能够访问外网的资源,那么就可以让这台服务器充当squid,并且做正向代理.一般这个机器是有2块网卡,一块连接内网,一块连接外网 一.环境准备: squid服务器: eth0:192.168.233.128/24(外网网卡,能上外网) eth1:192.168.231.129/24(内网网卡) 内网服务器:192.168.231.130/24(内网网卡) 二.安装Squid #需要配置好本地yum源 yum install squid

squid代理服务器配置详解

[email protected] squid]# cat squid.conf## Recommended minimum configuration:#visible_hostname www.jd.com #设置代理服务器名称cache_mgr [email protected] #设置缓存管理员邮箱acl manager proto cache_objectacl localhost src 127.0.0.1/32 ::1acl to_localhost dst 127.0.0.0/8