http缓存相关请求头

2018-03-14  本文已影响543人  Vijay_

1.缓存相关

Cache-Control:在响应头中设置,用于通知浏览器该资源需要被缓存

常用值有

mark

建议使用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);
}
mark

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);
}
mark

注:大多数浏览器默认有缓存机制,所以如果没显示如图响应头信息可能是你的请求被缓存了,

使用ctrl+f5刷新会发送Pragma:no-cacheCache-Control:no-cache请求头,重新请求服务器,就会看到响应头的信息


Last-Modified:表示该文件的最后修改日期,是文件属性和服务端没关系

对于静态资源文件这是一个很有用的属性,请求静态资源文件时,请求头会携带一个If-Modified-Since:xxx(时间)属性,该属性是上一次请求时获取到的Last-Modified时间,如果本次请求的请求头时间与响应头时间一致,则返回304状态码,告诉浏览器你当前拥有的页面是最新的不需要获取新的数据


总结

对于静态资源,浏览器它会先根据本地保存的缓存时间来查看是否过期,未过期就直接拿本地的。

如果过期了则会携带上次获取到的文件修改日期 请求服务器,服务器则会比对文件修改日期考虑是否返回新的数据。

如果浏览器本地的是最新的服务器并没修改,则会返回304告诉本地是最新的 直接拿上次记录的响应信息就行,于是该静态资源再次被缓存

上一篇下一篇

猜你喜欢

热点阅读