今天和同事在讨论浏览器的缓存问题。正好之前有遇到过,当时一时没有想清楚它的缓存机制,所以晚上正好有时间仔细研究了一下。

浏览器为什么要缓存?什么会缓存下来?

首先当我们访问网页的时候,很多大的图片从服务器上传输过来的时候,试想一下,如果浏览器不把图片缓存下来而是每次都要到服务器去取,那么每次都给服务器和网络造成了巨大的负担。

对于静态资源来说,浏览器不会缓存html页面的,所以你每次改完html的页面的时候,html都是改完立即生效的,不存在什么有缓存导致页面不对的问题。浏览器缓存的东西有图片,css和js。这些资源将在缓存失效前调用的时候调用浏览器的缓存内容。

怎么让浏览器的缓存的东西不失效?

文档里有种说法是吧header中的Expires:设置为Sun, 17-Jan-2038 19:14:07 GMT,因为这个时间是32位unix支持的最大的时间值

但是网上有种说法就是IIS6 最大的时间只能到31-Dec-2035

If you’re using IIS6 you’ll find that the UI won’t allow anything beyond 31-Dec-2035.

总之我们把这个时间设置到很大就可以了。下面是访问google时一个response返回的值。

补充一下,如果expires的时间为-1,那么缓存会立即失效。如果是一个将来时间,那么它将在将来时间失效

怎么让浏览器不缓存静态资源?

一种方式就是让你的页面有这样的header,Cache-Control: no-cache header,这样浏览器就不会缓存静态资源了,每次取数据的时候都去服务器上重新获取。

补充一下,如果设置no-cache的时候对IE是有效的,但是对于firefox是不行的,如果让firefox也不缓存要在header中加一个Cache-Control: no-cache, no-store

另外一种方式就是让你的静态资后缀加上一个版本号,比如

<link rel="stylesheet" type="text/css" href="../css/icon.css?version=3.1.32(2013-05-31)"/>

如果这个version有改变的话,下次就会重新获取这个静态资源。这样做的好处就是由你来控制什么时候来获取新的版本的静态资源。

如果不设置这些浏览器用什么来控制缓存失效?

header中有一个参数叫Last-Modified ,这个是由服务器自动加上的,如果有这个参数,那么浏览器每次都会重新计算本地的cache。如果浏览器返回一个304的编码就表示资源没有改变,那么浏览器就可以使用本地的cache。

就如参考文档中说的,对于IE来说,如果没有设置expirse header的时候,IE的缓存时间就是一个session的时间,如果用户打开一个新的IE窗口的时候,他们就会获取最新的静态资源。但是对于firefox来说它就不是这样了,它是依赖last—modified的时间的(HTTP 1.1 spec RFC2616)。

Also, if the response does have a Last-Modified time, the heuristic expiration value SHOULD be no more than some fraction of the interval since that time. A typical setting of this fraction might be 10%.

也就是说firefox的失效时间=现在时间+0.1*(time-last-modified ),就是他将在它上一次修改时间的十分之一的时间差的时候失效。

为什么这么做呢?我们可以想象一个文件越久没有修改,那么它就越稳定,所以缓存的时间也就越长。只是这个时间差要除以下10。

比如一个文件上次修改时间为100天之前,那么那10天后才会失效。

参考文档:http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/

总结一下,以前对浏览器的缓存及失效了解的不是很透彻,具体是如何失效的也不太清楚,那么现在对于如何能改变缓存,永久缓存及合适能失效都有了比较详细的了解。另外要注意的就是IE和firefox的机制还是有很大区别的。

谈谈浏览器的缓存过期时间相关推荐

  1. Nginx设置缓存过期时间

    Cache-Control location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css|html)$ {#禁止缓存,每次都从服务器请求#add_header Cac ...

  2. Nginx设置静态页面压缩和缓存过期时间的方法 (转)

    使用nginx服务器的朋友可能都知道需要设置html静态页面缓存与页面压缩与过期时间的设置了,下面我来给各位同学介绍一下配置方法,包括对ico,gif,bmp,jpg,jpeg,swf,js,css, ...

  3. 微信小程序实现缓存过期时间

    微信小程序实现缓存过期时间 前言 一.设置缓存 二.得到缓存 总结 前言 先来看看官方文档 wx.setStorageSync(string key, any data) 将数据存储在本地缓存中指定的 ...

  4. 微信小游戏服务器数据持久化,微信小程序wx.setStorage数据缓存实现缓存过期时间...

    为了项目性能等方面的考虑,有时候有必要为用户经常访问的页面使用缓存机制:在技术上,服务端和前端都有相应的缓存机制.比如传统的session及cookie等等,在微信小程序中,并没有cookie机制,但 ...

  5. SpringBoot @Cacheable Redis 设置缓存过期时间

    1.x 设置 @Bean @Primary public CacheManager cacheManager(RedisTemplate redisTemplate) {RedisCacheManag ...

  6. 谈谈浏览器的缓存机制

    一.缓存机制概述 浏览器的缓存机制也就是我们说的HTTP缓存机制,是根据HTTP报文的缓存标识进行的,所以在分析浏览器缓存机制之前,我们先使用图文简单介绍一下HTTP报文,以Chrome为例 F12打 ...

  7. @Cacheable 设置缓存过期时间

    RedisCacheConfig 文件 @Configuration public class RedisCacheConfig {/*** 自定义的缓存key的生成策略 若想使用这个key* 只需要 ...

  8. 【微信小程序】缓存过期时间的相关设置

    微信小程序缓存机制介绍   每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync).wx.getStorage(wx.getStorageSy ...

  9. Spring Caching配置缓存过期时间

    文章目录 一.Spring Cache是什么? 二.使用步骤 1.开启基于注解的缓存 2.配置缓存 三.解决方案 方案一:通过编写config设置缓存相关项 方案二:通过配置文件 一.Spring C ...

最新文章

  1. 在Ubuntu 16.04.04 LTS上调研QUIC开源项目minq笔记
  2. 互联网产品mysql数据库设计总结
  3. 百度大脑发挥AI“头雁效应” 王海峰:在AI时代共同推动社会智能化升级
  4. 【Android 安全】DEX 加密 ( Application 替换 | 分析 ContentProvider 组件中调用 getApplication() 获取的 Application 二 )
  5. eclipse中的maven build 、maven clean 、 maven install作用
  6. poj 2421 Constructing Roads
  7. html dot标签,html – CSS Dot符号命名约定
  8. SQL注入:4、数据库可写
  9. 并发并行,异步同步,阻塞非阻塞
  10. pytorch—torch.tensor.scatter操作解析
  11. html三页布局实训,创建css布局页面(上机实训任务).pdf
  12. Java_摩尔斯密码 非常详细
  13. 读书 -- 个人购书经验总结
  14. 海贼王燃烧意志服务器维修,海贼王燃烧意志刷经验
  15. php能不能用super,supersu怎么用
  16. 笔记本电脑上网出现问题的解决方法
  17. c语言五猴分桃案例分析,C语言程序设计五猴分桃问题实验报告.doc
  18. 超越杯编程大赛前线报道
  19. 香港 - 寻找轻鬆攻略游(蒲台岛)
  20. 3D可视化黑科技,VR线上智慧城市在线三维展示

热门文章

  1. csgo客服端文件与比赛服务器,B5全新客户端功能大揭秘 自定义比赛功能篇
  2. 不一样的围棋问题(C语言)
  3. oracle12c客户端安装配置,Oracle 12.2简易客户端安装配置
  4. 德意志银行的PaaS可以帮助银行扭转局面吗?
  5. nuxt3:我们开始吧-开发-配置-部署
  6. 【转载】机器学习计算距离和相似度的方法
  7. Word控件Spire.Doc 【脚注】教程(1) 使用C#或VB.NET在 Word 文档中插入脚注和尾注
  8. 小程序云开发接入赞赏功能
  9. 对话旷视孙剑:比 TensorFlow 还早半年,旷视 Brain++ 的进化法则
  10. strcasecmp php,PHP中strcmp()和strcasecmp()函数字符串比较用法分析