public static void ProcessScriptRequest(HttpContext context, string scriptKey, string contentType) { var response = context.Response; var request = context.Request; var script = DynamicScriptManager.GetScript(scriptKey); if (script == null) { throw new HttpException(404, "File not found!"); } int expiresOffset = 365; // Cache for 365 days in browser cache response.ContentType = contentType; response.Charset = "utf-8"; response.Cache.SetExpires(DateTime.Now.AddDays(expiresOffset)); response.Cache.SetCacheability(HttpCacheability.Private); response.Cache.SetValidUntilExpires(false); response.Cache.VaryByHeaders["Accept-Encoding"] = true; var enc = Regex.Replace("" + request.Headers["Accept-Encoding"], @"\s+", "").ToLower(); var supportsGzip = script.CompressedBytes != null && enc.IndexOf("gzip") != -1 || request.Headers["---------------"] != null; if (supportsGzip) { response.AppendHeader("Content-Encoding", "gzip"); } WriteWithIfModifiedSinceControl(context, supportsGzip ? script.CompressedBytes : script.UncompressedBytes, script.Time); }
public async static Task ReturnScript(HttpContext context, string scriptKey, string contentType) { var dynamicScript = DynamicScriptManager.GetScript(scriptKey); if (dynamicScript == null) { context.Response.StatusCode = (int)HttpStatusCode.NotFound; await context.Response.WriteAsync("File not found!"); return; } var mediaType = new MediaTypeHeaderValue(contentType); mediaType.Encoding = System.Text.Encoding.UTF8; context.Response.ContentType = mediaType.ToString(); var responseHeaders = context.Response.GetTypedHeaders(); var cacheControl = new CacheControlHeaderValue(); cacheControl.MaxAge = TimeSpan.FromDays(365); // allow CDNs to cache anonymous resources if (!string.IsNullOrEmpty((string)context.Request.Query["v"]) && !Authorization.IsLoggedIn) { cacheControl.Public = true; } else { cacheControl.Private = true; } cacheControl.MustRevalidate = false; responseHeaders.CacheControl = cacheControl; var supportsGzip = dynamicScript.CompressedBytes != null && context.Request.Headers["Accept-Encoding"].Any(x => x.IndexOf("gzip") >= 0); byte[] contentBytes; if (supportsGzip) { context.Response.Headers["Content-Encoding"] = "gzip"; contentBytes = dynamicScript.CompressedBytes; } else { contentBytes = dynamicScript.UncompressedBytes; } await WriteWithIfModifiedSinceControl(context, contentBytes, dynamicScript.Time); }
public async static Task ReturnScript(HttpContext context, string scriptKey, string contentType) { var dynamicScript = DynamicScriptManager.GetScript(scriptKey); if (dynamicScript == null) { context.Response.StatusCode = (int)HttpStatusCode.NotFound; await context.Response.WriteAsync("File not found!"); return; } var mediaType = new MediaTypeHeaderValue(contentType); mediaType.Encoding = System.Text.Encoding.UTF8; context.Response.ContentType = mediaType.ToString(); var responseHeaders = context.Response.GetTypedHeaders(); var cacheControl = responseHeaders.CacheControl = new CacheControlHeaderValue(); cacheControl.MaxAge = TimeSpan.FromDays(365); cacheControl.Private = true; cacheControl.MustRevalidate = false; var supportsGzip = dynamicScript.CompressedBytes != null && context.Request.GetTypedHeaders().AcceptEncoding.ToString() .IndexOf("gzip", StringComparison.OrdinalIgnoreCase) >= 0; byte[] contentBytes; if (supportsGzip) { context.Response.Headers["Content-Encoding"] = "gzip"; contentBytes = dynamicScript.CompressedBytes; } else { contentBytes = dynamicScript.UncompressedBytes; } await WriteWithIfModifiedSinceControl(context, contentBytes, dynamicScript.Time); }
public static void ProcessScriptRequest(HttpContext context, string scriptKey, string contentType) { var response = context.Response; var request = context.Request; DynamicScriptManager.Script script; try { script = DynamicScriptManager.GetScript(scriptKey); } catch (ValidationError ve) { if (ve.ErrorCode == "AccessDenied") { response.StatusCode = 403; return; } throw; } if (script == null) { response.StatusCode = 404; response.StatusDescription = "A dynamic script with key " + scriptKey + " is not found!"; return; } int expiresOffset = 365; // Cache for 365 days in browser cache response.ContentType = contentType; response.Charset = "utf-8"; response.Cache.SetExpires(DateTime.Now.AddDays(expiresOffset)); // allow CDNs to cache anonymous resources if (!string.IsNullOrEmpty(request.QueryString["v"]) && !Authorization.IsLoggedIn) { response.Cache.SetCacheability(HttpCacheability.Public); } else { response.Cache.SetCacheability(HttpCacheability.Private); } response.Cache.SetValidUntilExpires(false); response.Cache.VaryByHeaders["Accept-Encoding"] = true; var enc = Regex.Replace("" + request.Headers["Accept-Encoding"], @"\s+", "").ToLower(); var supportsGzip = script.CompressedBytes != null && enc.IndexOf("gzip") != -1 || request.Headers["---------------"] != null; if (supportsGzip) { response.AppendHeader("Content-Encoding", "gzip"); } WriteWithIfModifiedSinceControl(context, supportsGzip ? script.CompressedBytes : script.UncompressedBytes, script.Time); }