已删除旧版本,Svelte应用仍调用App Engine错误端点?
我用Svelte/SvelteKit做前端、FastAPI做后端搭了个简单Web应用,部署在Google App Engine上。前端地址是example.uc.r.appspot.com,API地址是api-dot-example.uc.r.appspot.com。
API有个端点api-dot-example.uc.r.appspot.com/sample/run,接收表单数据返回JSON。最初部署的前端版本写错了端点,调用的是api-dot-example.uc.r.appspot.com/sampel/run(sampel拼写错误)。
后来我部署了修正后的版本,删掉了旧版本,现在每个服务只剩一个可用版本。按说前端不该再调用错误端点,但浏览器控制台还是报两个错误:
- 初始加载页面时:
start.41c53d35.js:1 Mixed Content: The page at 'https://example.uc.r.appspot.com/form' was loaded over HTTPS, but requested an insecure resource 'http://0.0.0.0:8000/sample/run'. This request has been blocked; the content must be served over HTTPS.
- 刷新页面时:
Access to fetch at 'https://api-dot-example.uc.r.appspot.com/sampel/run' from origin 'https://example.uc.r.appspot.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
第一个错误暂时不管,第二个错误和旧版本的错误完全一致。为什么现在的应用还会请求最新版本里根本没写的错误端点?
当前调用端点的Svelte代码是:
let response = await fetch( "https://api-dot-example.uc.r.appspot.com/sample/run",{ method: 'POST', headers: { "Content-Type": "application/json", }, body: JSON.stringify(formData), }, )
可能的原因及解决办法
- 浏览器缓存残留:浏览器大概率缓存了旧版本的前端静态文件(比如报错里的
start.41c53d35.js),即使你部署了新版本,没清缓存的话浏览器还是会加载旧代码发请求。- 解决:用快捷键强制刷新页面(Ctrl+Shift+R / Cmd+Shift+R),或者手动清空浏览器对应网站的缓存。后续部署可以确认SvelteKit的静态资源哈希配置,让新版本资源文件名带唯一哈希,彻底避免缓存冲突。
- GAE平台缓存:Google App Engine的CDN或边缘节点可能还存着旧版本的静态资源,虽然你删了旧版本,但缓存没同步更新。
- 解决:登录GAE控制台,检查缓存策略并手动触发缓存失效;确认部署时完全替换了旧资源,没有残留文件。
- 代码里还有遗漏的错误地址:你贴的代码是对的,但可能其他组件、配置文件或环境变量里还藏着
sampel的错误拼写。比如某个路由组件没更新,或者环境变量里的API地址写错了。- 解决:全局搜索项目里的
sampel字符串,确保所有地方都改成sample;检查SvelteKit的环境配置文件,确认API端点设置正确;再核对一次部署的代码分支,确保推的是修正后的版本。
- 解决:全局搜索项目里的
- Service Worker缓存问题:如果你的应用配置了PWA的Service Worker,它可能缓存了旧资源,导致页面刷新后还是用旧代码。
- 解决:在浏览器开发者工具的「Application」标签里找到Service Worker,点击「Unregister」再刷新页面。后续部署要确保Service Worker能正确检测新版本并更新缓存。
内容的提问来源于stack exchange,提问作者fngarrett

