/// <summary> /// 输出缓存内容 /// </summary> /// <param name="response"></param> /// <param name="maxage"></param> /// <param name="handler"></param> /// <returns>是否缓存在客户端</returns> public static bool Output(HttpResponse response, int maxage, StringCreatorHandler handler) { /* * Public 指示响应可被任何缓存区缓存。 * Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的 * 部分响应消息,此响应消息对于其他用户的请求无效。 * no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换) * 根据什么能被缓存 * no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 * 根据缓存超时 * max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 * min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 * max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 * 接收超出超时期指定值之内的响应消息。 * Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的 * 效果。但是如果同时存在,则被Cache-Control的max-age覆盖。 * 格式: */ #region 获取缓存状态 HttpRequest request = HttpContext.Current.Request; //现在时间 DateTime nowTime = DateTime.Now.ToUniversalTime(); string sinceModified = request.Headers.Get("If-Modified-Since"); if (!String.IsNullOrEmpty(sinceModified)) { //最后修改时间 DateTime sinceTime; DateTime.TryParse(sinceModified, out sinceTime); sinceTime = sinceTime.ToUniversalTime(); if ((nowTime - sinceTime).TotalSeconds < maxage) { response.StatusCode = 304; response.Status = "304 Not Modified"; return(true); } } #endregion #region 输出内容并缓存 response.Write(handler()); response.AddHeader("Cache-Control", "max-age=" + maxage.ToString()); response.AddHeader("Last-Modified", nowTime.ToString("r")); #endregion return(false); }
/// <summary> /// 输出缓存内容 /// </summary> /// <param name="response"></param> /// <param name="etag"></param> /// <param name="handler"></param> /// <returns>是否缓存在客户端</returns> public static void Output(ICompatibleResponse response, string etag, StringCreatorHandler handler) { HttpHosting.Context.Request.TryGetHeader("If-None-Match", out var clientEtag); if (String.Compare(clientEtag, String.Concat("\"", etag, "\""), false) == 0) { response.StatusCode(304); //response.Status = "304 Not Modified"; return; } response.AddHeader("ETag", "\"" + etag + "\""); response.WriteAsync(handler()); }
/// <summary> /// 输出缓存内容 /// </summary> /// <param name="response"></param> /// <param name="etag"></param> /// <param name="handler"></param> /// <returns>是否缓存在客户端</returns> public static bool Output(HttpResponse response, string etag, StringCreatorHandler handler) { string clientEtag = HttpContext.Current.Request.Headers.Get("If-None-Match"); if (String.Compare(clientEtag, String.Concat("\"", etag, "\""), false) == 0) { response.StatusCode = 304; response.Status = "304 Not Modified"; return(true); } response.AddHeader("ETag", "\"" + etag + "\""); response.Write(handler()); return(false); }
public void ETagOutput(HttpResponse response, StringCreatorHandler handler) { CacheUtil.Output(response, cacheSha1ETag, handler); }
/// <summary> /// /// </summary> /// <param name="response"></param> /// <param name="handler"></param> public void ETagOutput(HttpResponse response, StringCreatorHandler handler) { throw new NotImplementedException(); //CacheUtil.Output(response,_cacheSha1ETag,handler); }
public void ETagOutput(ICompatibleResponse response, StringCreatorHandler handler) { CacheUtil.Output(response, _cacheSha1ETag, handler); }
/// <summary> /// 输出缓存内容 /// </summary> /// <param name="response"></param> /// <param name="etag"></param> /// <param name="handler"></param> /// <returns>是否缓存在客户端</returns> public static bool Output(HttpResponse response, string etag, StringCreatorHandler handler) { string clientEtag = HttpContext.Current.Request.Headers.Get("If-None-Match"); if (String.Compare(clientEtag, String.Concat("\"", etag, "\""), false) == 0) { response.StatusCode = 304; response.Status = "304 Not Modified"; return true; } response.AddHeader("ETag", "\"" + etag + "\""); response.Write(handler()); return false; }
/// <summary> /// 输出缓存内容 /// </summary> /// <param name="response"></param> /// <param name="maxage"></param> /// <param name="handler"></param> /// <returns>是否缓存在客户端</returns> public static bool Output(HttpResponse response, int maxage, StringCreatorHandler handler) { /* Public 指示响应可被任何缓存区缓存。 Private 指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当用户的 部分响应消息,此响应消息对于其他用户的请求无效。 no-cache 指示请求或响应消息不能缓存(HTTP/1.0用Pragma的no-cache替换) 根据什么能被缓存 no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。 根据缓存超时 max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。 min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以 接收超出超时期指定值之内的响应消息。 Expires 表示存在时间,允许客户端在这个时间之前不去检查(发请求),等同max-age的 效果。但是如果同时存在,则被Cache-Control的max-age覆盖。 格式: */ #region 获取缓存状态 HttpRequest request = HttpContext.Current.Request; //现在时间 DateTime nowTime = DateTime.Now.ToUniversalTime(); string sinceModified = request.Headers.Get("If-Modified-Since"); if (!String.IsNullOrEmpty(sinceModified)) { //最后修改时间 DateTime sinceTime; DateTime.TryParse(sinceModified, out sinceTime); sinceTime = sinceTime.ToUniversalTime(); if ((nowTime - sinceTime).TotalSeconds < maxage) { response.StatusCode = 304; response.Status = "304 Not Modified"; return true; } } #endregion #region 输出内容并缓存 response.Write(handler()); response.AddHeader("Cache-Control", "max-age=" + maxage.ToString()); response.AddHeader("Last-Modified", nowTime.ToString("r")); #endregion return false; }