jmeter-CacheManager原理-1

摘自:https://www.cnblogs.com/blogsme/p/3393039.html

通过HTTP头控制浏览器的缓存

      浏览器缓存是提高用户体验和提升程序性能的一个很重要的途径,通过浏览器的缓存控制,可以对实时性要求不高的数据进行缓存,可以减少甚至不需要再次对服务器的请求就可以显示数据。

本文将介绍如果通过HTTP协议中的header来控制浏览器的缓存行为,建议大家在看的时候写代码试验下,这样对这些header的理解会更深一点。

HTTP协议定义了四个可以用来控制浏览器缓存的HTTP头,它们是:

Last-Modified

Expires

Pragma: no-cache

Cache-Control

下面分别介绍HTTP/1.0和HTTP/1.1协议下的缓存解决方法。

HTTP/1.0

在HTTP/1.0协议中,Last-Modified是控制缓存的一个非常重要的HTTP头。如果需要控制浏览器的缓存,服务器首先必须发送一 个以UTC时间为值的Last-Modifeid头,当第二次访问这个页面时,浏览器会发送一个If-Modified-Since头给服务器,让服务器 判断是否有必要更新内容,这个If-Modified-Since头的值就是上次访问页面时,浏览器发送的Last-Modifeid头的值。

Expires是HTTP/1.0中另外一个很重要的HTTP头,它表示缓存的存在时间,告诉客户端浏览器在这个时间之前不对服务器发送请求,而直接使用浏览器的缓存。

在HTTP/1.0中,可以使用Pragma: no-cache头来告诉浏览器不要缓存内容,它相当于HTTP/1.1中的Cache-Control:no-cache。

如果要使用HTTP/1.0协议来告诉客户端(包括任何中介代理)是否要缓存数据,可以使用以下代码,如果设置liftTime参数则告诉客户端数据缓存的生命期为lifeTime的值:

Php代码

function http_10_cache_headers($lifeTime = null){ 

    $gmtime = time(); 

    if ($lifeTime){ 

        $gmtime += $lifeTime; 

    }else { 

        header("Pragma: no-cache"); 

    } 

    $gmtime = gmdate('D, d M Y H:i:s',$gmtime).' GMT'; 

    header("Last-Modified: $gmtime"); 

    header("Expires: $gmtime"); 

function http_10_cache_headers($lifeTime = null){ $gmtime = time(); if ($lifeTime){ $gmtime += $lifeTime; }else { header("Pragma: no-cache"); } $gmtime = gmdate('D, d M Y H:i:s',$gmtime).' GMT'; header("Last-Modified: $gmtime"); header("Expires: $gmtime"); }

HTTP/1.0协议的这种实现方式的缺点是,服务器和客户端的时间有可能是不同步的,这样会造成缓存的实现达不到预期效果。HTTP/1.1协议用Cache-Control头解决了这个问题。

HTTP/1.1

Cache-Control响应头的语法为:

Cache-Control = “Cache-Control” “:”; #缓存响应指令

缓存响应指令为一下几个中的任意一个:

1. public

2. private

3. no-cache

4. no-store

5. no-transform

6. must-revalidate

7. proxy-revalidate

8. max-age=时间

9. s-maxage=时间

详细介绍一下这几个指令的具体含义:

1. public 指示响应数据可以被任何客户端缓存

2. private 指示响应数据可以被非共享缓存所缓存。这表明响应的数据可以被发送请求的浏览器缓存,而不能被中介所缓存

3. no-cache 指示响应数据不能被任何接受响应的客户端所缓存

4. no-store 指示所传送的响应数据除了不能被缓存,也不能存入磁盘。一般用于敏感数据,以免数据被复制。

5. must-revalidate 指示所有的缓存都必须重新验证,在这个过程中,浏览器会发送一个If-Modified-Since头。如果服务器程序验证得出当前的响应数据为最新的数 据,那么服务器应当返回一个304 Not Modified响应给客户端,否则响应数据将再次被发送到客户端。

6. proxy-revalidate 与must-revalidate相似,不同的是用来指示共享缓存。

7. max-age 数据经过max-age设置的秒数后就会失效,相当于HTTP/1.0中的Expires头。如果在一次响应中同时设置了max-age和 Expires,那么max-age将具有较高的优先级。

8. s-maxage 与max-age相似,不同的是用来指示共享缓存。

了解这些指令后就可以根据不同的需求来发送不同的HTTP头。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 7,804评论 0 6
  • 工作流程 一次HTTP操作称为一个事务,其工作过程可分为四步: 1)首先客户机与服务器需要建立连接。只要单击某个超...
    保川阅读 10,088评论 2 14
  • 本文是《图解HTTP》读书笔记的第二篇,主要包括此书的第六章内容,因为第六章的内容较多,而且比较重要,所以单独写为...
    lijiankun24阅读 5,276评论 0 6
  • 大家好,以下内容来自第一创业证券武汉欢乐大道营业部分享。 近几年各类宝宝和银行理财的收益,让股民朋友看到了账...
    格兰芬多橙阅读 5,224评论 0 51
  • 两个人的世界最浪漫了,那就是双方恋爱时期。我谈过不到一年的恋爱,从一个人走到了两个人,感觉是美好的,因恋爱总是让人...
    谁的孤独是一颗眼泪阅读 2,241评论 0 2

友情链接更多精彩内容