代码存档
public static bool IsCached(HttpContext context, TimeSpan cacheDuration) { var modifiedSince = context.Request.Headers["If-Modified-Since"]; if (!string.IsNullOrEmpty(modifiedSince)) { modifiedSince = Regex.Replace(modifiedSince, @";.*$", "");//ie6 } DateTime modified; if (DateTime.TryParse(modifiedSince, out modified) && modified.Add(cacheDuration) > DateTime.Now) { context.Response.StatusCode = 304; context.Response.Status = "304 Not Modified"; return true; } return false; } public static void SetCachedHeader(HttpContext context, TimeSpan cacheDuration) { FieldInfo maxAge = context.Response.Cache.GetType().GetField("_maxAge", BindingFlags.Instance | BindingFlags.NonPublic); maxAge.SetValue(context.Response.Cache, cacheDuration); //context.Response.Cache.SetMaxAge(cacheDuration); context.Response.Cache.SetETag(string.Empty); context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetLastModified(DateTime.Now); context.Response.Cache.SetExpires(DateTime.Now.Add(cacheDuration)); context.Response.Cache.AppendCacheExtension( "must-revalidate, proxy-revalidate"); } public static void Cached(HttpContext context) { Cached(context, TimeSpan.FromMinutes(10)); } public static void Cached(HttpContext context, TimeSpan cacheDuration) { if (!IsCached(context, cacheDuration)) { SetCachedHeader(context, cacheDuration); } else { context.Response.End(); } } public static void GZIP(HttpContext context) { string acceptEncoding = context.Request.Headers["Accept-Encoding"]; if (!String.IsNullOrEmpty(acceptEncoding)) { acceptEncoding = acceptEncoding.ToString().ToUpperInvariant(); //如果头部里有包含"GZIP”,"DEFLATE",表示你浏览器支持 GZIP,DEFLATE压缩 if (acceptEncoding.Contains("GZIP")) { //向输出流头部添加压缩信息 context.Response.AppendHeader("Content-encoding", "gzip"); context.Response.Filter = new GZipStream(context.Response.Filter, CompressionMode.Compress); } else if (acceptEncoding.Contains("DEFLATE")) { //向输出流头部添加压缩信息 context.Response.AppendHeader("Content-encoding", "deflate"); context.Response.Filter = new DeflateStream(context.Response.Filter, CompressionMode.Compress); } } }