asp.net-mvc – MVC的HTTP缓存 – Last-Modified响应头始终等于D
我不完全理解.NET MVC的HTTP缓存是如何工作的,因为它似乎并没有真正检索缓存的资源文件.我想我需要在某处添加一些额外的代码……
首先,我们来看看我如何在静态内容(即图像)上设置HTTP缓存.在我的web.config中,我有以下内容: <system.webServer> <staticContent> <clientCache cacheControlMode="UseExpires" httpExpires="Tue,19 Jan 2038 03:14:07 GMT" /> </staticContent> </system.webServer> 这导致我的应用程序中的图像看起来正确缓存.当我查看图像的响应标头时,我看到了这一点(删除了不必要的标头): Date:Thu,27 Feb 2014 16:27:48 GMT ETag:"086f8d199a4ce1:0" Expires:Tue,19 Jan 2038 03:14:07 GMT Last-Modified:Thu,29 Aug 2013 09:26:20 GMT 我看到一个好的ETag值,我的Expires应该是它的.此外,Last-Modified日期已过去.我理解上次修改日期是服务器上次要求该文件的日期. 现在让我们看一下由MVC优化的javascript文件的响应头.作为提醒,this文章指出“Bundles在创建捆绑包后的一年内设置HTTP Expires Header”. Cache-Control:public Date:Thu,27 Feb 2014 16:44:16 GMT Expires:Fri,27 Feb 2015 16:44:16 GMT Last-Modified:Thu,27 Feb 2014 16:44:16 GMT Vary:User-Agent MVC缓存文件的响应标头缺少ETag. Cache-Control值为“public”,静态内容响应头上没有.最后,Expires是Last-Modified日期之后的1年,这是正确的,但Last-Modified日期始终与Date值相同.对我来说,这些响应标题看起来就像是第一次从服务器请求并缓存资源时的情况,而不是随后从缓存中请求和检索资源时的情况. 提前感谢您的任何见解. 更新:它实际上似乎是在IE中缓存.后续请求的上次修改日期仍为过去的值.不过,我在FF或Chrome中没有看到这一点.我确认在这两种浏览器中,我都没有禁用缓存.是什么赋予了? 解决方法
首先,system.webServer / staticContent / clientCache仅用于静态资源(文件).所以如果你直接访问图片它是有效的.
bundle是动态资源(处理程序正在生成内容).这就是配置指令不适用的原因. 其次,使用ETag,Expires,Last-Modified是三种不同的缓存技术.您不应该同时使用这两种技术,因为它们以不同的方式工作. Expires告诉浏览器将文件保留在缓存中直到指定日期.在该日期之前,浏览器永远不会调用服务器. ETag是一种动态缓存机制.浏览器将始终调用服务器,但如果内容未更改,则服务器可能不会响应内容. Last-Modified是一种古老的动态缓存机制.它的工作方式与ETag相同,但是要求公开正确的修改日期是有问题的.在创建动态内容时,这不容易找到. 我认为结合多种技术应该只为经过深思熟虑的案例保留.有关详细信息,请参见此answer. 您可能需要阅读基础知识:HTTP caching 然后针对您的问题,我不确定为什么您的应用会暴露出如此多的标题.在一个包上出现Last-Modified很难解释.捆绑包是一种虚拟的东西,它将各种文件合并为一个.因此它没有最后修改的实际日期.您使用额外的缓存代码/模块吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 当我将’启用32位应用程序’更改为False时,为什
- asp.net-mvc – 无法解析符号’ViewBag’
- asp.net – 在VMware主机中扩展 – 添加vCPU或VM?
- 从ASP.NET网站将查询结果发送到Excel
- asp.net-mvc – Mono上的ASP.NET MVC
- asp.net – Sitecore – System.Security.Cryptography.Cry
- asp.net – 如何.NET网站隐藏它们的文件的.aspx扩展名?
- asp.net-mvc – 如何利用Resharper的“导航到控制器方法”功
- asp.net-mvc – 绕过asp.net mvc中特定类型的DataAnnotatio
- asp.net-mvc – 如何在路由上处理null {id}?
- 为什么这会考虑不好的做法?或者是吗? (ASP.Net
- asp.net – HtmlGenericControl(“br”)呈现两次
- asp.net – VS2015为Class Library添加引用
- asp.net-mvc-3 – MVC将JSON ViewModel传递给Vie
- ASP.NET – 括号中的负数
- asp.net – IIS 7中的会话超时
- asp.net – (.NET Core 1.0 \u0026\u002
- ASP.Net Forms身份验证在10分钟后注销用户
- ASP.NET MVC:如何将多个对象传输到View方法?
- asp.net-mvc-3 – 实体框架将float数据类型映射为