一、具体流程
(1)IIS安装URL 重写模块
安装成功后如图
(2)IIS配置URL 重写匹配规则
添加一条规则 (我的模式是匹配所有文件的, 匹配模式需要自行查阅)
(3)根据匹配规则,重写文件的响应头
RESPONSE_Cache-Control=private, no-store, no-cache, must-revalidate, proxy-revalidate
(4)vue项目中index.html增加meta标签
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">
二、存在问题
(1)一直以来我都有困惑,为啥我vue项目打包出来的文件是带有哈希值的,但浏览器依旧存在缓存,导致页面代码没有更新
【问题解答】vue打包出来的文件中index.html没有hash值,浏览器采用了缓存的index.html文件,导致访问的js等文件路径参数没有变化,所以js上的hash值无法解决页面缓存问题。
(2)我在index.html的<head>中加入了禁止缓存的meta,但是未生效
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-control" content="no-cache">
<meta http-equiv="Cache" content="no-cache">
【问题解答】仅设置meta是无效的,需要配合服务器禁用缓存,才有效
三、解决方案
(1)IIS安装URL 重写模块
(2)IIS配置URL 重写规则
(3)index.html新增meta
四、测试用例
(1)配置前 第二次访问所有文件采用缓存, index.html不仅status为304 且大小仅77B(index.html的真实大小有1.1kb)
(2)配置后 第二次访问 html有1.1kb,说明没有采用缓存文件, 其他类型文件采用缓存
五、参考文档
URL重写插件官方文档: URL 重写模块 2.0 配置参考 | Microsoft Learn