我正在使用tomcat8,我的项目中有一个非常大的javascript文件。默认情况下,浏览器和tomcat将使用Last-Modified,ETag来确定是否需要传输javascript文件或使用缓存的文件。
但由于javascript文件很少更新,所以我希望浏览器可以使用本地缓存,并且不要询问服务器是否修改了文件,因为这样仍然需要http请求。我觉得这很浪费。
然后我在expiresfilter下面使用expires头到浏览器。
<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 minutes</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType text/css</param-name>
<param-value>access plus 10 minutes</param-value>
</init-param>
<init-param>
<param-name>ExpiresByType application/javascript</param-name>
<param-value>access plus 10 minutes</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ExpiresFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
但它仍然无效。仍然发送了http请求并且收到了http响应304。
如何避免这种不必要的请求?如果我实现它,我怎么能要求浏览器获取新脚本如果我真的更新它大约3个月一次?