公司动态
“幽灵页面”问题记录:WEB、前端、浏览器,阿里ESA边缘缓存介绍与解决缓存的方法记录
问题介绍前言:当清理浏览器缓存也无效时项目上客户配置的的域名访问体检公众号系统,发现,即使关闭了系统、修改了代码,甚至换了一台全新的客户端电脑,那个旧页面/接口依然顽固地显示着,之前碰到的缓存都是客户端缓存,浏览器缓存一清就好了。问题排查过程:一开始我访问请求,发现这个get请求还是返回的旧数据,tomcat也看不到这个请求的访问日志,一度怀疑是不是tomcat日志级别等问题,但是监控tomcat catalina.out实时输出 System.out.println()的语句也没打印,才想到是根本没访问就来,然后关闭项目发现域名地址居然也可以访问 ,才确认了域名地址肯定是取到某个地方的缓存了。测试使用tomcat的局域网地址直接访问,只要浏览器没缓存,确认了是可以访问到最新的代码。查看请求的network 发现 Response headers server 显示的是ESA ,不是我最常见的nginx;这是遇到了“服务器端缓存”——特别是近年来大火的边缘缓存ESA ( Edge Security Acceleration)。目前排查发现 ESA会缓存所有地址一样的GET请求,如果后面加了时间戳就能跳过缓存从服务器读取,这样系统需要改造所有get请求都要加上时间戳。一、 什么是阿里云 ESA?ESA(Edge Security Acceleration,边缘安全加速)是阿里云推出的一款全球分布式边缘网络平台。你可以把它理解为**“超级 CDN + WAF 防火墙 + 边缘计算”的融合体**。它在全球部署了数千个边缘节点。当用户访问你的网站时,ESA 会在离用户最近的节点拦截请求。如果节点上已经缓存了你要的页面或资源,它会直接返回给你,根本不会去请求你的源站服务器。这就是为什么你改了源站代码,用户看到的依然是旧页面的原因。类似产品有哪些?在边缘计算与加速领域,ESA 并不是孤军奋战,市面上还有以下知名产品:Cloudflare:全球最知名的边缘网络服务商,其 Workers 和缓存机制是业界标杆。AWS CloudFront + Lambda@Edge:亚马逊云的 CDN 结合边缘计算服务。Vercel / Netlify:现代前端框架最爱的托管平台,自带强大的全球边缘缓存。Akamai:老牌的全球内容分发与安全巨头。二、 陷入死局:代码改了,但请求根本进不来怎么办?这是最核心的痛点:由于 ESA 缓存了之前的 GET 请求,后续所有的访问都被边缘节点直接拦截并返回了旧数据,你的修改在源站服务器里根本接收不到请求。破局方法:主动刷新(Purge)缓存不要干等缓存自然过期!你需要登录 ESA 控制台(或联系运维),找到“刷新缓存”功能。按 URL 刷新:直接输入被缓存的页面完整 URL。按目录刷新:如果整个模块都出问题了,直接刷新/Bsoft