2014-06-26 223 views
3

我遇到的问题是部分文件(*。html)正在被浏览器缓存。虽然开发它不是一个大问题,但是一旦我部署应用程序,客户端会看到旧页面,直到他们清除缓存或点击Ctrl F5 我已经尝试指定元标记(CACHE-CONTROL,EXPIRES),但仍然可以看到这些页面在铬的开发者工具缓存中获取 (也许我在这里错过了一些东西?)。防止html页面浏览缓存

我要去尝试,并在网址前面加上一些随机数像

<div ng-include src="'views/test.html?i=1000'"></div> 

但整个https://groups.google.com/forum/#!topic/angular/9gORRowzP2M来了,在那里詹姆斯·库克正确地指出,这种方式只能一遍遍地填充缓存中的谐音。

我在某处读过,最好从服务器的标题中设置元标记,但我不知道该怎么做?我想不知何故在http拦截器中做它?也许不知何故在这个httpinterceptor的请求或响应添加元标记? https://gist.github.com/gnomeontherun/5678505

任何想法如何做到这一点?或者,如果这是好的/坏主意?或者有其他方法来防止浏览器缓存部分页面?

+0

告诉我们一些关于您的后端。 – Adder

+0

不完全确定你是什么意思的后端,以及它如何与浏览器缓存?但是“后端”在mongoDB上,前端是Asp.net Mvc和AngularJS – DanNut

+0

的混合体,使用过期的expires头文件应该可以做到这一点,如果其他头文件是非常正常的话。 – dandavis

回答

0

在如果任何人运行了同样的问题,我结束了添加一个HttpHandler并添加在响应报头中的“缓存控制”和“过期”

public void ProcessRequest(HttpContext context) 
    { 
     var partial = context.Request.FilePath; 

     var filepath = context.Server.MapPath("~/" + partial); 

     context.Response.AddHeader("Content-Disposition", "filename=\"" + Path.GetFileName(filepath) + "\""); 

     // To make sure partial html pages are not cached by browser(s) 
     context.Response.AddHeader("Cache-Control", "No-Cache"); 
     context.Response.AddHeader("Expires", "0"); 
     context.Response.ContentType = MimeTypesHelper.GetMimeType(filepath); 
     context.Response.WriteFile(filepath); 
    } 
1

为了防止缓存,在很多情况下不可能将其从客户端完全关闭。您必须以正确的方式配置您的服务器,以便生成正确的HTTP头。

但在$templateCache的帮助下,您可以将您的HTML偏分量表单文件移动到index.html文件中的脚本标记中。这也将减少应用程序需要进行的AJAX调用的次数。 使用index.html中的模板,您只需确保index.html不会被缓存。

这里也是它的讨论: Is there a way to make AngularJS load partials in the beginning and not at when needed?

+0

在我的情况下,我有很多partials,并不认为我想在开始时将它们全部下载,但会更多地考虑这个想法! – DanNut