项目里边更换了同名的图片地址 / 图片没有及时更新 / 什么原因

一、问题分析

1.1、分析一 浏览器缓存

项目里边更换了同名的图片地址,图片没有及时更新

可能是浏览器缓存的原因,浏览器会将之前访问过的文件缓存下来,下次访问同名的文件时会先从缓存中读取。
如果相同的图片地址没有发生变化,浏览器就会直接使用缓存中的图片,而不是重新请求服务器。这就导致了同名图片地址更换后,页面上显示的图片没有及时更新。

<img src="image.jpg?v=123456">

每次加载时随机生成一个不重复的参数,这样浏览器就会认为这是一个新的地址,不会从缓存中读取,而是重新请求服务器下载新的图片。

1.2、分析二 CDN缓存

项目里边更换了同名的图片地址,图片没有及时更新

如果你的图片是通过CDN分发的,那么清除浏览器缓存可能还不够,因为CDN也会有一定的缓存时间。
当你更换同名的图片地址后,CDN上的缓存并不会立即失效,而是需要等待一定时间后才会刷新。因此,你需要清除CDN缓存来解决同名图片地址更换后无法及时更新的问题。

不同的CDN提供商具体的清除缓存方法可能会有所不同。大多数CDN提供商都提供了很方便的缓存刷新工具,你只需要输入要刷新的URL或者目录,然后点击刷新按钮即可。一般来说,CDN刷新需要一定的时间来生效,具体时间取决于CDN提供商的刷新策略和缓存时间。

1.3、分析三 CDN缓存

有些用户请求到的图片是新的,有些用户请求到的是旧的,什么原因呢

这种情况很可能是因为CDN缓存没有完全刷新导致的。
当你更换同名的图片地址后,CDN上的缓存并不会立即失效,而是需要等待一定时间后才会刷新。在这个过程中,有些用户可能会请求到旧的缓存图片,有些用户则会请求到新的图片。

为了解决这个问题,你需要通过清除CDN缓存来确保所有用户都能够请求到最新的图片。不同CDN提供商具体的清除缓存方法可能会有所不同,但基本都提供了缓存刷新工具,你可以输入要刷新的URL或者目录,然后点击刷新按钮来清空缓存。请注意,CDN刷新需要一定的时间来生效,具体时间取决于CDN提供商的刷新策略和缓存时间。

1.4、分析四 浏览器缓存和CDN缓存的交互作用

同一个用户,有时候看到新的有时候看到旧的,什么原因呢

如果同一个用户在不同的时间请求同一个图片,有时候看到新的有时候看到旧的,可能是因为浏览器缓存和CDN缓存的交互作用。

浏览器在请求图片时,会先检查自己的缓存是否有与该图片对应的缓存,如果有,就直接使用缓存,不会再向服务器请求新的图片。而CDN缓存的更新时间可能比较长,所以在浏览器缓存没有失效之前,如果CDN缓存中还是旧的图片,用户就会看到旧的图片。

解决这个问题的方法就是清除浏览器缓存。如果你想保证用户能够看到最新的图片,可以在更换图片地址后,附加一个随机数或者时间戳作为图片地址的一部分,这样可以避免浏览器和CDN缓存的影响,强制让浏览器重新请求新的图片。

1.5、分析五 访问CDN的节点

同一个用户,有时候看到新的有时候看到旧的,什么原因呢

访问的CDN节点可能会影响用户看到的内容是否是新的或旧的。
CDN是通过缓存内容来提高网站访问速度的技术,它会根据用户的位置,选择最近的CDN节点来提供内容。
如果一个CDN节点缓存了旧的内容,那么用户可能会在其访问时看到旧的内容,而其他缓存了新内容的CDN节点则可以提供新的内容给用户。
因此,访问的CDN节点会对用户看到的内容是否是新的或旧的起到一定的影响。

二、解决问题

2.1、方法一

可以在更换图片地址就可以了,cdn缓存,cdn洪流

<img src="image1.jpg">

2.2、方法二 

<img src="image.jpg?v=123456">

2.3、方法三

可以使用强缓存和协商缓存的机制,来控制浏览器缓存的有效期和更新方式。 

2.4、方法四

清除CDN缓存

2.5、方法五

不着急的话,可以等一等~

三、过程记录

记录一、使用强缓存和协商缓存的机制,如何来控制浏览器缓存的有效期和更新方式

强缓存和协商缓存是控制浏览器缓存的有效期和更新方式的两种机制。

强缓存

强缓存是通过在响应头中设置Cache-Control和Expires字段来实现的。在服务器端设置响应头的时候,可以通过设置Cache-Control和Expires字段来控制浏览器缓存的有效期和更新方式。如果设置了Cache-Control和Expires字段,客户端在请求资源时,会首先通过判断这两个字段来决定是否使用缓存。

Expires字段指定了过期时间,过期时间是一个具体的时间点。例如:Expires: Wed, 21 Oct 2023 07:28:00 GMT。这个时间点是服务器端的时间,如果当前时间在过期时间之前,浏览器就会使用缓存,否则就会请求服务器。

Cache-Control字段是HTTP/1.1引入的,可以设置多个参数来控制缓存的行为。其中比较重要的有:

max-age:指定缓存的最大有效时间,单位为秒。例如:Cache-Control: max-age=3600表示缓存1小时,如果在这个时间内再次请求资源,浏览器就会使用缓存。public:指明响应可以被缓存,包括客户端缓存和代理服务器缓存。private:指明响应只能被客户端缓存,不能被代理服务器缓存。

协商缓存

协商缓存是通过在响应头中设置Last-Modified和ETag字段来实现的。在服务器端设置响应头的时候,可以通过设置Last-Modified和ETag字段来控制浏览器缓存的有效期和更新方式。如果设置了Last-Modified和ETag字段,客户端在请求资源时,会先发送一个请求到服务器,服务器会将这个请求中的If-Modified-Since(Last-Modified的值)和If-None-Match(ETag的值)字段与服务器中的资源进行比对,如果相同,则说明资源没有更新,可以使用缓存;否则说明资源已被更新,服务器会重新返回资源内容,并在响应头中设置新的Last-Modified和ETag字段。

强缓存和协商缓存可以通过设置不同的缓存头来控制浏览器缓存的有效期和更新方式,具体的设置可以根据实际应用场景进行调整。

记录二、理解CDN洪流

CDN洪流是指CDN(内容分发网络)服务器在一段时间内收到的大量请求。一些常见的解决方法包括:

1.增加CDN服务器数量:增加CDN服务器数量可以分担流量负载,提高响应速度和稳定性。

2.优化缓存:优化CDN缓存可以减少服务器请求,并降低服务器负载和响应时间。

3.使用负载均衡:使用负载均衡器可以将请求分配到不同的CDN服务器上,以便更好地处理CDN洪流。

4.限流:通过限制每秒请求的数量,可以减少CDN洪流的影响,并保护CDN服务器免受过载攻击。

5.使用CDN厂商提供的特殊解决方案:一些CDN厂商提供了特殊的解决方案,包括自适应调度器、预热、动态防御等,以帮助企业解决CDN洪流等问题。

四、欢迎交流指正

猜你喜欢

转载自blog.csdn.net/snowball_li/article/details/134563019
今日推荐