一、对于一个链接,修改了其中内容部署完了,但是在浏览器(微信浏览器举例)中打开,还是显示原来的内容,原因
1、浏览器缓存策略
除了网页的响应头设置之外,浏览器自身也有缓存策略。例如,浏览器可能会将某些资源缓存到本地,以便下次访问时更快地加载。如果你想要避免这种缓存,可以在资源的 URL 中添加一个随机参数,这样浏览器就会认为这是一个新的资源,不会使用之前的缓存
2、CDN 缓存
如果你使用了 CDN 服务来加速网页的访问,CDN 服务器也有可能缓存网页的内容。在这种情况下,即使你设置了不缓存的响应头,CDN 服务器仍然可能会缓存网页的内容。你可以联系 CDN 服务提供商,了解如何清除缓存,或者等待缓存过期
3、代理服务器缓存
如果你的网页被部署在公司或者机构的内部网络中,那么可能存在代理服务器缓存的情况。在这种情况下,即使你设置了不缓存的响应头,代理服务器仍然可能会缓存网页的内容。你可以联系网络管理员,了解如何清除代理服务器缓存
二、解决办法
1、在链接的 URL 中添加随机参数
例如,可以将链接修改为 https://example.com/page?timestamp=123456789,其中的 timestamp 参数可以是当前时间戳。这样每次访问时,浏览器会认为这是一个新的资源,不会使用之前的缓存
2、使用 HTTP 头部中的 Cache-Control 和 Expires
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="wed, 26 feb 1997 08:21:57 gmt">
<meta http-equiv="expires" content="0">
在网页的响应头中设置 Cache-Control:no-cache 和 Expires:0,可以让浏览器强制重新加载网页,而不使用之前的缓存。注意,这种方法并不是100%可靠,因为浏览器可能会忽略这些设置。
3、使用版本号控制
在网页的静态资源(例如 CSS、JS 等)中,可以将版本号作为文件名的一部分,例如 style-v1.0.css、script-v2.0.js。每次更新静态资源时,修改版本号即可。这样浏览器会认为这是一个新的资源,不会使用之前的缓存
4、结合服务端的缓存策略,刷新cdn缓存
三、服务端缓存策略
1、HTTP 缓存。在响应头中设置 Cache-Control 和 Expires 等字段,控制浏览器对响应结果的缓存行为。可以设置缓存时间、缓存范围等参数,减少对服务器的请求。
1、CDN 缓存。使用 CDN(内容分发网络)服务,可以将静态资源缓存在离用户更近的 CDN 节点上,提高访问速度和并发访问能力。可以在 CDN 上设置缓存时间和缓存规则等参数。
3、数据库缓存。对于需要频繁访问的数据,可以将其缓存到内存或者缓存服务器上,减少对数据库的访问。可以使用 Redis、Memcached 等工具来实现。
4、页面片段缓存。对于动态页面,可以将其中的静态部分缓存起来,例如头部、底部、导航栏等。这样可以减少页面渲染时间和服务器的负载。
5、对象缓存。对于一些需要复杂计算的对象,可以将其计算结果缓存起来。例如,将一个需要复杂计算的报表结果缓存起来,下次访问时直接使用缓存结果。