缓存问题
禁止index.html缓存
- 如果
index.html存在缓存,可能刷新后,更新提示还会存在,所以需要禁用index.html的缓存 - 对于保证每次发布新版本时用户能立即获取最新资源非常重要
- 保证每次前端发版部署,
index.html都是最新的,当index.html更新时,里面的脚本当发生变化都会重新获取资源
如果缓存了index.html会造成的问题?
- 比如缓存了
index.html,静态资源都放在了CDN,那么前端每次部署更新的时候,由于了缓存了index.html,页面及时强刷新了,也是看到旧的内容,旧的index.html。因为index.html引用的js、css的脚本都是旧的,如果不禁止缓存index.html, 会导致需要刷新CDN (去源站拿到最新资源), 用户才能看到最新的内容
html禁止缓存
- 通过
html meta标签禁用缓存: - 这些meta标签有助于兼容旧版浏览器,但现代浏览器主要依赖HTTP响应头来决定缓存策略。因此,结合服务器端配置会更有效
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
</head>
</html>
nginx禁止缓存
# nginx.conf
location / {
index index.html index.htm;
# 禁止index.html缓存
if ($uri = '/index.html' ) {
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
try_files $uri $uri/ /index.html;
}
缓存标识
响应标头
x-cache
- x-cache HIT TCP_MEM_HIT dirn:-2:-2
- 通过MEM_HIT标识 表示缓存
- x-cache MISS TCP_MISS dirn:-2:-2
- 通过MISS标识 表示不缓存
cache-control
- no-store
- 表示不缓存
CDN缓存问题
只缓存前端的静态资源
- 1、只缓存js、css等静态文件
- 2、不缓存index.html
- 3、不缓存接口数据,避免接口数据缓存,造成每个用户看到的数据都是一样