2014-06-26 274 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