Tomcat環境下設定HTTP強快取
阿新 • • 發佈:2019-01-06
在之前的一篇文章《HTTP快取詳解》中詳細的整理了關於HTTP快取的知識點,這一篇通過實踐,具體驗證如何設定HTTP的強快取,讓客戶端直接從本地快取中拿資源,而不發起網路請求。
一、設定HTTP強快取
可通過Expires
與Cache-Control
控制資源何時過期。Expires
通過設定一個具體過期日期來控制,Cache-Control
是設定一個距離第一次請求之後多久的時間段來控制。
1.自定義Filter
過濾器程式碼如下:
public class FilterCache implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
//res.setDateHeader("expries", new Date().getTime()+60*60*24*1000); //- 設定一天失效,經測試Chrome下不生效
res.setHeader("Cache-Control", "max-age=10"); //- 這裡的單位為秒,10代表第一次請求10s後過期
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
web.xml配置如下:
<!-- 過濾所有的js檔案 -->
<filter>
<filter-name>FilterCache</filter-name >
<filter-class>com.demo.cache.FilterCache</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterCache</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
2.使用容器的Filter
tomcat容器提供自有的過濾器來設定HTTP快取,只需在web.xml中進行配置即可,相信其它伺服器也有相關的配置項,例如Nginx、WebLogic等。
配置如下:
<filter>
<filter-name>ExpiresFilter</filter-name>
<filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
<init-param>
<param-name>ExpiresByType image</param-name>
<param-value>access plus 10 days</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 10 days</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType application/javascript</param-name>
<param-value>access plus 10 days</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
官方文件:
二、特別說明
1.客戶端環境準備
在Chrome下,需進行如下設定(F12接著按F1即可開啟settings面板):
2.重新整理瀏覽器方式
經過測試,只有通過瀏覽器位址列回車的方式強快取才會生效;以F5、瀏覽器重新整理按鈕、Ctrl+R方式重新整理頁面均會發起HTTP網路請求,即使快取未過期。
三、結果
在Chrome下測試結果如下:
設定Cache-Control
的過期時間為10s,第一次請求返回200,在size欄下顯示檔案大小;第二次重新整理頁面,size欄顯示from memory cache
,即證明瀏覽器未發起網路請求,直接從本地快取中獲取資源。在IE下會顯示來自快取
,Firefox下顯示已快取
。
經測試,使用Cache-Control
設定快取在Chrome、Firefox、Edge、IE11下均有效,使用Expires
只在IE11與Edge下生效。