1.缓存相关
Cache-Control:在响应头中设置,用于通知浏览器该资源需要被缓存
常用值有
建议使用max-age
示例:
//web.xml
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.base.filters.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
<url-pattern>*.png</url-pattern>
<url-pattern>*.gif</url-pattern>
</filter-mapping>
//MyFilter
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// 设置缓存时间响应头
((HttpServletResponse) resp).setHeader("Cache-Control", "max-age=5");
chain.doFilter(req, resp);
}
image
Expires:其作用也是设置缓存时间(什么时候过期),但是在设置了cache-control的情况下会被覆盖
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
// 设置缓存时间响应头
int time = 5*1000;//5秒
((HttpServletResponse) resp).setDateHeader("Expires", System.currentTimeMillis()+time);
chain.doFilter(req, resp);
}
image
注:大多数浏览器默认有缓存机制,所以如果没显示如图响应头信息可能是你的请求被缓存了,
使用ctrl+f5刷新会发送
Pragma:no-cache
和Cache-Control:no-cache
请求头,重新请求服务器,就会看到响应头的信息
Last-Modified:表示该文件的最后修改日期,是文件属性和服务端没关系
对于静态资源文件这是一个很有用的属性,请求静态资源文件时,请求头会携带一个If-Modified-Since:xxx(时间)
属性,该属性是上一次请求时获取到的Last-Modified
时间,如果本次请求的请求头时间与响应头时间一致,则返回304状态码,告诉浏览器你当前拥有的页面是最新的不需要获取新的数据
总结
对于静态资源,浏览器它会先根据本地保存的缓存时间来查看是否过期,未过期就直接拿本地的。
如果过期了则会携带上次获取到的文件修改日期 请求服务器,服务器则会比对文件修改日期考虑是否返回新的数据。
如果浏览器本地的是最新的服务器并没修改,则会返回304告诉本地是最新的 直接拿上次记录的响应信息就行,于是该静态资源再次被缓存
网友评论