典型 React 应用面临的缓存问题,可通过 Nginx 配置进行解决

通用部署

构建应用后,只需使用 Nginx 指向静态文件即可

server {
listen 80;
root /PATH/TO/APP/build;
try_files $uri $uri/ /index.html;
}

缓存问题

第一次请求页面的时候,所有页面和资源都是从服务器返回的,如下图所示:

关闭浏览器,重新打开,输入网址,按下Enter,浏览器会从本地缓存获取文件,如下图所示:

即使在以上两次请求之间,页面已更新,浏览器也不会从服务器重新获取更新,因为 disk cache 并没有和服务器进行任何通信

解决思路

如果资源文件有更新,其文件名就会更新,所以资源的缓存不是问题,只需禁用页面的缓存即可

即把以上的

  try_files $uri $uri/ /index.html;

替换为

  location / {
if ( $uri = '/index.html' ) {
add_header Cache-Control no-store always;
}
try_files $uri $uri/ /index.html;
}
  • 因为所有的页面最终都指向入口文件,所以其实际的 $uri 都是 /index.html
  • no-store 是最严格的 Cache-Control 禁用缓存的值,确保浏览器不使用任何缓存
  • 因为 add_header 连带 if 不能直接在 server 下,所以加了一层 location

解决效果

这样第二次请求页面时,页面本身不会缓存,但是资源如果没有改变就会缓存,如下图所示:

可以访问以下地址,尝试操作,并查看对应的网络请求:

http://react.chanvinxiao.com

总结

  • 浏览器输入地址按 Enter 会出现奇怪的缓存问题
  • 通过 Nginx 的 $uri 可以判断请求是否为页面
  • 通过 Nginx 的 add_header 可以设置缓存控制头

React 应用的 Nginx 缓存控制的更多相关文章

  1. nginx缓存配置的操作记录梳理

    web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...

  2. CDN网络(一)之典型的CND架构与HTTP协议的缓存控制

    前言 本人以前在CDN厂商蓝汛就职过一年时间,利用脑子里还残留的一些CDN知识,结合现有的书籍材料,写点东西. what's the CDN CDN(content delivery Network) ...

  3. Nginx实现负载均衡&Nginx缓存功能

    一.Nginx是什么 Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambl ...

  4. nginx缓存设置(expires)

    一.expires功能说明 nginx缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高用户浏览速度,我们可以通过设置ng ...

  5. Nginx缓存服务

    Nginx缓存服务 1.缓存常见类型 2.缓存配置语法 3.缓存配置实践 4.缓存清理实践 5.部分页面不缓存 6.缓存日志记录统计 通常情况下缓存是用来减少后端压力, 将压力尽可能的往前推, 减少后 ...

  6. Nginx缓存使用官方教程及常见问题解答

    原文地址:http://www.kuqin.com/shuoit/20150804/347388.html 我们都知道,应用程序和网站一样,其性能关乎生存.但如何使你的应用程序或者网站性能更好,并没有 ...

  7. HTTP的缓存控制

    1.缓存的分类: (1)缓存分为服务端侧(server side,比如 Nginx.Apache)和客户端侧(client side,比如 web browser). (2)服务端缓存又分为 代理服务 ...

  8. NGINX 缓存使用指南

    NGINX 缓存使用指南 [proxy_cache] Nginx 一个web缓存坐落于客户端和“原始服务器(origin server)”中间,它保留了所有可见内容的拷贝.如果一个客户端请求的内容在缓 ...

  9. nginx缓存配置及开启gzip压缩

    阅读目录 一:nginx缓存配置 二:nginx开启gzip 回到顶部 一:nginx缓存配置 在前一篇文章,我们理解过http缓存相关的知识点, 请看这篇文章. 今天我们来学习下使用nginx服务来 ...

  10. 浏览器缓存控制 以及 在url框中回车、F5 和 Ctrl + F5的区别

    第一部分: 浏览器缓存如何控制?   做网站,不知道缓存是什么东西怎么能行! 如何实现HTTP缓存呢? 下面我们来一步一步的探寻实现机制把. 方案一: 无缓存   说明:浏览器向服务器请求资源m.pn ...

随机推荐

  1. 快来考试拿证书!KubeSphere 个人技能专业考试认证上线啦!

    以容器技术和容器编排为基础的云原生应用,被越来越多的企业用户接受和使用,并且在生产环境中使用容器技术的比例逐年增加.Kubernetes 无疑已经成为容器编排的事实基础,而依托于 Kubernetes ...

  2. 云原生周刊:Kubernetes v1.28 正式发布 | 2023.8.21

    开源项目推荐 kurt 一个 Kubernetes 插件,可提供 Kubernetes 集群中重启内容的上下文信息. Kubean Kubean 是一个基于 kubespray 的 Kubernete ...

  3. Visual Studio登录页面打不开无法登录的解决

    我也是折腾了好久-- 1. 打开Visual Studio-->工具-->选项-->账户,找到了登录配置 2. 将嵌入式Web浏览器改为"Windows身份认证中转站&qu ...

  4. Java高并发关于synchronized的8锁讲解

    先了解一个概念:synchronized 锁的是这个方法所在的资源类,就是这个对象,也就是同一时间段不可能有两个线程同时进到这个资源类,同一时间段,只允许有一个线程访问资源类里面的其中一个synchr ...

  5. CLIPFit:不绕弯子,直接微调比提示微调和适配器微调更好 | EMNLP'24

    来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: Vision-Language Model Fine-Tuning via Simple Parameter-Efficient Modifi ...

  6. 使用ob_tools包收集分析oceanbase数据库oracle租户缓慢sql语句

    概述 1.手册目的: 本手册旨在提供一种系统化的方法论,以便发现和分析慢SQL语句.通过使用ob_tools包,收集和分析在交付期间,应用程序在不同场景下进行压测时所产生的慢SQL语句,从而实现性能调 ...

  7. CSP模拟58联测20 T3 注视一切的终结

    CSP模拟58联测20 T3 注视一切的终结 题面及数据范围 Ps:链接为衡水中学OJ. 去除重边以后是树,而我们需要使一个点到另外一个点的简单路径上相邻边的颜色尽可能不相同. 发现如果一条边有 \( ...

  8. .NET9 - 新功能体验(一)

    被微软形容为"迄今为止最高效.最现代.最安全.最智能.性能最高的.NET版本"--.NET 9已经发布有一周了,今天想和大家一起体验一下新功能. 此次.NET 9在性能.安全性和功 ...

  9. 嵌入式Linux系统构建

    参考资料 本篇内容主要参考 韦东山的<嵌入式Linux应用开发完全手册V5.2_IMX6ULL_Pro开发板.pdf> 具体课程见 百问网嵌入式专家-韦东山嵌入式专注于嵌入式课程及硬件研发 ...

  10. Linux中更新系统时间、同步系统时间和硬件时间

    更新系统的时间 ​ 1.手动修改 ​ date -s # 不建议 ​ 2.时间同步服务器 ​ ntpdate # 需要安装命令 yum -y install ntpdate ​ [root@oldbo ...