- 41
- 0
现在生产中遇到一个问题,就是vue-cli3项目打包之后,放置到nginx上,浏览器会有缓存,这个需要怎么处理?
- 共 0 条
- 全部回答
-
我瞎跟我走 普通会员 1楼
在Vue CLI 3项目打包之后,若要在Nginx上处理浏览器的缓存,可以采用以下几种方法:
- 设置预处理器:Vue CLI 3默认提供了
--build-optimizer选项,该选项会使用--optimization-cache选项进行优化。你可以将--optimization-cache选项设置为true,然后在你的Nginx配置文件中添加以下内容:
nginx server { location / { try_files $uri $uri/ /index.html; if (-f $uri) { if (GET request_method = GET) { if (headers.get('Cache-Control') != 'no-cache') { return 403; } } if (headers.get('Cache-Control') == 'no-cache') { expires 0; return 304; } if (headers.get('Pragma') != 'no-cache') { return 403; } if (headers.get('Last-Modified') != 'Mon, 01 Jan 1970 00:00:00 GMT') { return 403; } return 200; } } }此配置在请求包含
GET方法时,如果响应头中没有Cache-Control或Pragma头中的no-cache值,Nginx将直接返回200状态码,并处理请求内容。- 设置HTTP缓存:如果你不想在服务器端进行缓存处理,你可以通过在Nginx配置文件中设置
gzip或compress模块来处理HTTP响应内容。在你的nginx.conf文件中添加以下内容:
```nginx location / { gzip on; gzip_types text/plain application/json application/x-www-form-urlencoded application/json text/xml text/xml application/xml media-type text/css text/html text/javascript application/javascript application/x-javascript text/x-component; gzip_disable "msie6";
if (-f $uri) { if (GET request_method = GET) { if (headers.get('Cache-Control') != 'no-cache') { return 403; } } if (headers.get('Cache-Control') == 'no-cache') { if (headers.get('Pragma') != 'no-cache') { return 403; } if (headers.get('Last-Modified') != 'Mon, 01 Jan 1970 00:00:00 GMT') { return 403; } return 200; } }} ```
在此配置中,我们启用
gzip模块,并配置了HTTP响应内容类型为text/plain,application/json,application/x-www-form-urlencoded等,以匹配大部分常见的HTTP响应内容类型。同时,我们设置了gzip_disable头部来禁用IE6的msie6缓存。- 使用缓存控制头:如果你的Vue项目直接使用了
<script>标签来嵌套<script>标签,并且这些标签包含了<script>标签的来源,你可以通过在<head>标签中设置Cache-Control头部来设置缓存控制。例如:
html <head> <meta name="Cache-Control" content="max-age=3600"> </head>这将设置响应内容的缓存时间为1小时,即缓存期限为1小时。如果在这个时间内请求内容没有被客户端清除,Nginx将不会缓存这个请求内容,直接返回200状态码。
- 使用缓存令牌:如果你的Vue项目使用了CDN,你可以通过在Nginx配置文件中设置
Cache-Control头部和Expires头部来设置缓存令牌。例如:
```nginx location / { gzip on; gzip_types text/plain application/json application/x-www-form-urlencoded application/json text/xml text/xml application/xml media-type text/css text/html text/javascript application/javascript application/x-javascript text/x-component; gzip_disable "msie6";
if (-f $uri) { if (GET request_method = GET) { if (headers.get('Cache-Control') != 'no-cache') { return 403; } } if (headers.get('Cache-Control') == 'no-cache') { if (headers.get('Pragma') != 'no-cache') { return 403; } if (headers.get('Last-Modified') != 'Mon, 01 Jan 1970 00:00:00 GMT') { return 403; } return 200; } if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) || $_SERVER['HTTP_IF_MODIFIED_SINCE'] < strtotime('+1 hour')) { return 304; } header('HTTP/1.1 304 Not Modified'); return 200; }} ```
在上述配置中,我们首先设置了
Cache-Control头部的max-age为1小时,然后在Expires头部设置了响应内容的缓存时间为1小时。在请求内容包含<script>标签时,我们检查HTTP_IF_MODIFIED_SINCE头是否为当前时间,如果不是,则返回304状态码,表示资源已经过期。请注意,不同的Nginx版本可能需要使用不同的方法来设置缓存控制和缓存令牌。如果你的项目使用的是较早的Nginx版本,可能需要使用
cache-control头部和Expires头部,而如果你的项目使用的是较新的Nginx版本,可能需要使用Cache-Control头部和Cache-Control-TTL头部,其中Cache-Control-TTL头部表示缓存令牌的有效时间。 - 设置预处理器:Vue CLI 3默认提供了
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
