美文网首页
http缓存相关请求头

http缓存相关请求头

作者: Vijay_ | 来源:发表于2018-03-14 15:45 被阅读543次

    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告诉本地是最新的 直接拿上次记录的响应信息就行,于是该静态资源再次被缓存

    相关文章

      网友评论

          本文标题:http缓存相关请求头

          本文链接:https://www.haomeiwen.com/subject/xnsfqftx.html