mwrock / RequestReduce

Instantly makes your .net website faster by reducing the number and size of requests with almost no effort.
www.requestreduce.org
Apache License 2.0
228 stars 48 forks source link

When the 'rrfilter' query string parameter is specified, ASP.NET output caching should be disabled #195

Closed candrews closed 12 years ago

candrews commented 12 years ago

When the 'rrfilter='something query string parameter is used, such as to disable RR (rrfilter=disabled), ASP.NET output caching should be disabled using:

Response.Cache.SetCacheability(HttpCacheability.Private);
mwrock commented 12 years ago

Thanks a bunch for all of this. I'm transitioning roles at work and have been pretty much been working round the clock to get all my current responsibilities tied up so I will probably not be able to really dig into these issues until the weekend. Thanks!!


From: "Craig" <reply+i-4951405-74bb56014d47d7610892a24303a8ca299e240795-655165@reply.githu b.com>

Sent: Thursday, June 07, 2012 7:46 AM

To: "Matt Wrock" matt@mattwrock.com

Subject: [RequestReduce] When the 'rrfilter' query string parameter is specified, ASP.NET output caching should be disabled (#195)

When the 'rrfilter='something query string parameter is used, such as to disable RR (rrfilter=disabled), ASP.NET output caching should be disabled using:


Response.Cache.SetCacheability(HttpCacheability.Private);

Reply to this email directly or view it on GitHub:

https://github.com/mwrock/RequestReduce/issues/195

candrews commented 12 years ago

Here's a replacement body for ResponseFilter.InstallerFilter that resolves this issue:

        public static void InstallFilter(HttpContextBase context)
        {
            var request = context.Request;
            var config = RRContainer.Current.GetInstance<IRRConfiguration>();
            if (context.Items.Contains(ContextKey))
            {
                return;
            }else{
                if (request.QueryString["RRFilter"] != null && request.QueryString["RRFilter"].Equals("disabled", StringComparison.OrdinalIgnoreCase))
                {
                    context.Response.Cache.SetCacheability(HttpCacheability.Private);
                    return;
                }
                else if ((config.CssProcessingDisabled && config.JavaScriptProcessingDisabled) ||
                    context.Response.IsRequestBeingRedirected ||
                    RRContainer.Current.GetAllInstances<IFilter>().Where(x => x is PageFilter).FirstOrDefault(y => y.IgnoreTarget(new PageFilterContext(context.Request))) != null)
                {
                    return;
                }
            }

            if (context.Items.Contains(ContextKey) ||
                (request.QueryString["RRFilter"] != null && request.QueryString["RRFilter"].Equals("disabled", StringComparison.OrdinalIgnoreCase)) ||
                (config.CssProcessingDisabled && config.JavaScriptProcessingDisabled) ||
                context.Response.StatusCode == 302 ||
                context.Response.StatusCode == 301 ||
                RRContainer.Current.GetAllInstances<IFilter>().Where(x => x is PageFilter).FirstOrDefault(y => y.IgnoreTarget(new PageFilterContext(context.Request))) != null)
                return;

            var hostingEnvironment = RRContainer.Current.GetInstance<IHostingEnvironmentWrapper>();
            if (string.IsNullOrEmpty(config.SpritePhysicalPath))
                config.SpritePhysicalPath = hostingEnvironment.MapPath(config.SpriteVirtualPath);

            var oldFilter = context.Response.Filter; //suppresses a asp.net3.5 bugg 
            context.Response.Filter = RRContainer.Current.GetInstance<AbstractFilter>();
            context.Items.Add(ContextKey, new object());
            RRTracer.Trace("Attaching Filter to {0}", request.RawUrl);
        }