[英]Stop caching files with Java
我試圖避免緩存我的自定義js文件,因為我經常更改它們,並且客戶端會緩存舊的js文件。
因此,我正在嘗試一種解決方案( http://www.baeldung.com/cachable-static-assets-with-spring-mvc ),但是它沒有用。 它根本不會像預期的那樣更改js文件的名稱。
我正在使用Spring MVC 5
@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler()
.setCacheControl(CacheControl.maxAge(1, TimeUnit.SECONDS))
.resourceChain(false)
.addResolver(new VersionResourceResolver().addContentVersionStrategy("/**"));
}
}
<script type="text/javascript" src="<c:url value="../resources/js/pageJS/login.js" />"></script>
<filter>
<filter-name>resourceUrlEncodingFilter</filter-name>
<filter-class>
org.springframework.web.servlet.resource.ResourceUrlEncodingFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>resourceUrlEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
知道發生了什么嗎?
../resources/js/pageJS/login.js
保持相同的名稱
似乎您需要使用
registry.addResourceHandler("/js/**")
.addResourceLocations("/js/")
代替
registry.addResourceHandler()
取決於login.js文件的位置
另外,將1秒更改為30秒,以便給Spring提供一些呼吸空間:)
在您的控制器類的請求映射方法中嘗試以下操作:
@RequestMapping("/test")
public ModelAndView preventCache(HttpServletResponse response){
response.setHeader("Expires", "Tue, 01 Jan 2001 00:00:01 GMT");
response.setHeader("Last-Modified", new Date().toString());
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
return new ModelAndView("viewName");
}
添加過期或緩存控制標頭
標簽:服務器
該規則有兩個方面:
網頁設計越來越豐富,這意味着頁面中會有更多的腳本,樣式表,圖像和Flash。 首次訪問頁面的訪問者可能必須發出多個HTTP請求,但是通過使用Expires標頭,您可以使這些組件可緩存。 這避免了后續頁面視圖上不必要的HTTP請求。 Expires標頭最常與圖像一起使用,但應在所有組件(包括腳本,樣式表和Flash組件)上使用它們。
瀏覽器(和代理)使用緩存來減少HTTP請求的數量和大小,從而使網頁加載速度更快。 Web服務器使用HTTP響應中的Expires標頭告訴客戶端可以將組件緩存多長時間。 這是一個遠期的Expires標頭,告訴瀏覽器直到2010年4月15日,此響應才會陳舊。
Expires: Thu, 15 Apr 2010 20:00:00 GMT
如果您的服務器是Apache,請使用ExpiresDefault指令設置相對於當前日期的到期日期。 ExpiresDefault指令的此示例將Expires日期設置為從請求時間算起的10年。
ExpiresDefault "access plus 10 years"
請記住,如果使用遠期的Expires標頭,則每當組件更改時,都必須更改組件的文件名。 在雅虎! 我們通常將此步驟作為構建過程的一部分:版本號嵌入在組件的文件名中,例如yahoo_2.0.6.js。
僅在用戶已經訪問您的網站之后,使用將來有效的Expires標頭才會影響頁面瀏覽量。 當用戶首次訪問您的站點並且瀏覽器的緩存為空時,它對HTTP請求的數量沒有影響。 因此,此性能改進的影響取決於用戶使用預填充緩存訪問您的頁面的頻率。 (“主緩存”已包含頁面中的所有組件。)我們在Yahoo! 並發現帶有預填充緩存的頁面瀏覽量為75-85%。 通過使用遠期的Expires標頭,可以增加瀏覽器緩存並在后續頁面視圖中重復使用的組件的數量,而無需通過用戶的Internet連接發送單個字節。
利用瀏覽器緩存
當PageSpeed Insights檢測到來自服務器的響應不包括緩存頭或指定僅在短時間內緩存資源時,將觸發此規則。
概觀
通過網絡獲取資源既緩慢又昂貴:下載可能需要在客戶端和服務器之間進行多次往返,這會延遲處理並可能阻止頁面內容的呈現,並且還會增加訪問者的數據成本。 所有服務器響應都應指定一個緩存策略,以幫助客戶端確定是否以及何時可以重用以前獲取的響應。
建議
每個資源都應指定一個明確的緩存策略,以回答以下問題:該資源是否可以緩存,以及誰可以緩存該資源多長時間,如果適用,在緩存策略過期時如何對其進行有效地重新驗證。 服務器返回響應時,它必須提供Cache-Control和ETag標頭:
要確定適合您站點的最佳緩存策略,請使用以下指南:
對於靜態資產或不經常更改的資產,我們建議最短緩存時間為一周,最好為一年。 如果您需要精確控制何時使資源無效,我們建議您使用URL指紋或版本控制技術-請參閱上方的使無效和更新緩存的響應鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.