asp.net – 如果内容是静态的,那么对于带有“If-Modified-Since
发布时间:2020-12-16 06:59:39 所属栏目:asp.Net 来源:网络整理
导读:在我们的Asp.Net应用程序中,我们有一个IHttpHandler处理图像请求. 使用特殊id调用Handler,该id标识图像缓存中的图像. 一旦图像投入现金,它就永远不会改变. 我的问题是: 是否可以在没有实际检查给定日期的情况下始终为具有“If-Modified-Since”标头的请求返
在我们的Asp.Net应用程序中,我们有一个IHttpHandler处理图像请求.
使用特殊id调用Handler,该id标识图像缓存中的图像. 一旦图像投入现金,它就永远不会改变. 我的问题是: 是否可以在没有实际检查给定日期的情况下始终为具有“If-Modified-Since”标头的请求返回http状态代码304? 这将使生活更轻松,因为我们(尚未)跟踪图像创建日期. 这是实际代码(更新:我现在在Aristos推荐的服务器响应中包含了if-modified标头): public void ProcessRequest(HttpContext context) { if (!String.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"])) { //Is this okay? context.Response.StatusCode = 304; context.Response.StatusDescription = "Not Modified"; return; } var thumbnailId = context.Request.QueryString["thumbnail"]; using (var thumbnailCache = new CThumbnailCache()) { var imageBytes = thumbnailCache.GetImageById(thumbnailId); context.Response.ContentType = "image/png"; var outputStream = context.Response.OutputStream; outputStream.Write(imageBytes,imageBytes.Count()); context.Response.Cache.SetCacheability(HttpCacheability.Public); context.Response.Cache.SetLastModified(DateTime.UtcNow); // added after Aristos post context.Response.AddHeader("If-Modified-Since",DateTime.UtcNow.ToString("r")); const int maxAge = 86400 * 14; // 14 Tage context.Response.Cache.SetExpires(DateTime.Now.AddSeconds(maxAge)); context.Response.Cache.SetMaxAge(new TimeSpan(0,maxAge)); context.Response.CacheControl = "private"; context.Response.Cache.SetValidUntilExpires(true); } } 解决方法
从你获得If-Modified的那一刻起它就可以了 – 因为资源在浏览器上,你决定是否让它保持原样.
我喜欢这里说你们两个想.您似乎没有设置此标头,因此您可能无法通过浏览器获取它. 要使这个实际工作,您需要添加此行 context.Response.AddHeader("If-Modified-Since",LastModifledOfImage.ToString()); 或者当您发送当前日期时间时: context.Response.AddHeader("If-Modified-Since",DateTime.UtcNow.ToString()); 当你发送图像. 如果可能的话,考虑使这个图像实际上是静态的,因为即使这个If-Modified-Since也会对服务器进行一次调用,但实际的静态资源直接从浏览器缓存中获取图像而不询问服务器. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 使用ASP.NET MVC剃刀的自定义控件
- asp.net-mvc – 如何在MVC选择路由之前添加路由参数
- asp.net – iTextSharp与iText
- ASP.NET部署
- asp.net – 如何在Web.config中启用SmtpClient的SSL
- ASP.NET Core MVC 过滤器介绍
- asp.net-mvc – 在visual studio 2013中使用angularjs材质设
- asp.net-mvc-4 – Dapper多对多查询
- 如何在asp.net页面上的<%...%>标签内使用c#代码?
- asp.net – 错误:此程序集是由运行时比当前加载的运行时更
推荐文章
站长推荐
- ASP.NET MVC4绑定与Twitter Bootstrap
- asp.net – 为什么Page.PreviousPage始终为null?
- 使用NUnit与ASP.NET WebApi控制器执行集成测试
- asp.net-mvc – 如何管理服务层中的事务?
- asp.net – 如何在Firefox上命名文件以供下载?
- asp.net – 防止在ASP .Net中为单个用户进行多次
- asp.net-mvc – ASP.NET MVC:自定义排序
- 【Asp.Net MVC+EF+三层架构】详解(四)MVC框架操
- 如何在ASP.Net 5 Web API中启用OData
- C#_Excel数据读取与写入_自定义解析封装类_支持设
热点阅读