You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios GET请求在Heroku部署后返回空白响应,POST请求正常

解决Heroku部署后Axios GET请求返回空白HTML(304状态)的问题

核心原因:SPA路由与API路由优先级冲突

你的问题大概率是React单页应用(SPA)的静态文件托管配置拦截了GET请求,而POST请求不受此规则影响。

当在Heroku部署全栈应用时,如果后端(比如Express)最后配置了SPA fallback路由:

// 托管前端静态文件
app.use(express.static(path.join(__dirname, 'client/build')));

// 所有未匹配的GET请求返回index.html(SPA路由用)
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});

这段代码会把所有未被API路由匹配的GET请求都返回前端的index.html,导致你的/create/get-users GET请求被拦截,返回空白HTML(实际是前端入口文件),状态码304是浏览器或Heroku缓存机制导致的“未修改”响应。

而POST请求不会被app.get('*')捕获,所以能正常到达后端API路由并返回正确响应。

解决方案

1. 调整路由定义顺序

确保所有API路由在静态文件托管和SPA fallback路由之前定义:

// 先定义API路由
app.use('/create', yourRouter);

// 再托管静态文件
app.use(express.static(path.join(__dirname, 'client/build')));

// 最后配置SPA fallback
app.get('*', (req, res) => {
  res.sendFile(path.join(__dirname, 'client/build', 'index.html'));
});

这样后端会优先匹配API的GET请求,只有无匹配的GET请求才会返回前端index.html。

2. 禁用API GET请求的缓存

针对304状态码问题,在GET路由中添加禁用缓存的响应头,避免浏览器或Heroku缓存错误响应:

router.route('/get-users').get((req,res) => {
  // 添加缓存控制头
  res.set({
    'Cache-Control': 'no-cache, no-store, must-revalidate',
    'Pragma': 'no-cache',
    'Expires': '0'
  });
  res.json("yes")
})

3. 验证环境变量配置

确认Heroku上的REACT_APP_baseServerurl环境变量配置正确,检查路径是否存在多余斜杠或错误(比如是否末尾带/导致请求路径变为//create/get-users),不过因POST请求正常,此问题概率较低,可作为辅助排查项。


内容的提问来源于stack exchange,提问作者Alister Xavier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:15:37