在aspx+squid平台上实现服务端+浏览器端cache

aspx+squid平台上实现服务端+浏览器端cache

 

 

       Aspx上面最简单的cache语句是:

<%@ OutputCache Duration="1000" VaryByHeader="*" VaryByParam="*"%>

    VarybyHeader是因为我们在一个iis站点里面host了很多的域名。VarybyParam,是因为aspx页面里面都是不同的参数。所以这两个参数必不可少。

 

    这个只时候用户->IIS直接连接的方式,每次刷新页面,用户都需要从浏览器->iis获取一次数据。即页面如果是150k,那么每次都是获取150k大小的文件。

 

    鉴于我们的北方网通用户,如果按照上面,用户每次刷新页面都需要从北方网通到南方电信获取150k页面。

于是,我们在北方做squid加速,进而改进squid语句。目前采用的语句是:

<%

Response.Cache.SetNoServerCaching();

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetExpires( DateTime.Now.AddMinutes(10) );

%>

       第一句是清理掉当前IIS端的Cache,其实际作用是防止由于域名,参数带来的串页。

       第二句是设置cache可以作用在squid上。

       第三句是设置页面的过期时间是10分钟以后。

 

       这种情况下,用户每次刷新页面都是去缓存服务器上更新150k数据。减少了用户从北方网通到南方电信的访问,提高了用户速度。

      

       上面的过期时间,流程如下:

1IIS服务器现在时间:15:0010分钟以后过期,即15:10过期。

2.这时,SQUID服务器时间,如果是15:15的话,那么内容是立即失效的,因为已经过了15:10了。所以SQUID服务器时间必须比IIS时间晚,当然也可以把10分钟时间改成30分钟等等。否则每次都是SQUIDIIS获取数据。

SQUID日志:

200 34410 TCP_MISS:DIRECT

3.上面的过期与客户端时间无关,即便客户端已经是2008年了。用户每次都是刷新一下150K内容。

SQUID日志:

200 34419 TCP_HIT:NONE

如果用户是按住ALT以后刷新,SQUID日志是:

200 34393 TCP_CLIENT_REFRESH_MISS:DIRECT

 

       经过这两天测试,提出下面的改进:

<%

Response.Cache.SetNoServerCaching();

Response.Cache.SetCacheability(HttpCacheability.Public);

Response.Cache.SetAllowResponseInBrowserHistory(true);

Response.Cache.SetExpires( DateTime.Now.AddMinutes(10) );

Response.Cache.SetMaxAge( new TimeSpan(0,10,0) );

Response.Cache.SetLastModified( DateTime.Now.AddMinutes(-5) );

Response.Cache.SetValidUntilExpires(true);

%>

       第一句是清理掉当前IIS端的Cache,其实际作用是防止由于域名,参数带来的串页。

       第二句是设置cache可以作用在squid上。

       第三句是允许浏览器端可以缓存,其实第二句public就是已经包含这个,但是避免squid上有其他设置,还是把这句话加上。

第四句是设置页面的过期时间是10分钟以后。

第五句是设置页面的最大生存时间是300秒,就是5分钟。

第六句是设置页面的最后修改时间是5分钟以前。

第七句是设置页面的缓存一直不要失效,其实这句话没有用途。

 

上面的过期时间,流程如下:

1IIS服务器现在时间:15:0010分钟以后过期,即15:10过期。

2.这时,SQUID服务器时间,如果是15:15的话,那么内容是立即失效的,因为已经过了15:10了。所以SQUID服务器时间必须比IIS时间晚,当然也可以把10分钟时间改成30分钟等等。

此时SQUID日志:

200 34442 TCP_REFRESH_MISS:DIRECT

3.客户端浏览器已经获得了最大生存时间是300秒,那么以客户端计算的300秒之内,他访问SQUID服务器的时候都是根据浏览器缓存,请求文件是不是已经修改。SQUID已经获取了最后修改时间,这样就能够返回HTTPcode302,即没有修改。

Resync URL       Browser requested refresh if changed - http://zjvnet.9sky.com/index1.aspx   Completed

HTTP Request   Check if modified since 'Tue, 19 Apr 2005 07:58:40 GMT; length=34136'    Completed

HTTP Response Only headers returned as content has not changed     Completed

Read Cache         Content read from browser cache   Completed

此时SQUID日志:

304 225 TCP_IMS_HIT:NONE

这样的情况下,300秒之内每次传输的都是请求200个字节,返回300个字节。

300秒以后,客户端请求到SQUID。如果SQUID还是没有到过期时间,那么依然返回的是304,即文件没有更改;如果SQUID到了过期时间,那么SQUID将向IIS请求文件是否变化,显然文件已经变化了,这个时候是SQUIDIIS获取文件,再向客户端返回HTTPcode200

Resync URL       Browser requested refresh if changed - http://zjvnet.9sky.com/index1.aspx   Completed

HTTP Request   Check if modified since 'Tue, 19 Apr 2005 08:08:42 GMT; length=34147'    Completed

HTTP Response Headers and modified content returned   Completed

此时SQUID日志:

200 34442 TCP_REFRESH_MISS:DIRECT

如果用户按住ALT,再刷新页面,这时日志是:

200 34457 TCP_CLIENT_REFRESH_MISS:DIRECT

 

         在改进情况下,用户的速度再度提高。

除非用户每次都是按住CTRL,再刷新页面,但这只是在考验我们的传输线路。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值