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

Heroku上Express服务器返回HTTP/1.1 426 Upgrade Required问题求助

解决方案

1. 检查Express路由与WebSocket中间件的隔离

确保WebSocket相关的中间件(如ws、socket.io)仅挂载在指定路径,而非全局拦截所有HTTP请求:

  • 示例(使用socket.io):
    // 正确:仅在/ws路径处理WebSocket连接
    const io = require('socket.io')(server, { path: '/ws' });
    // 错误:全局挂载会导致普通HTTP请求被WebSocket逻辑拦截
    // const io = require('socket.io')(server);
    

2. 验证Heroku部署配置

  • 检查Procfile的启动命令,确保启动的是完整的Express服务,而非仅WebSocket进程。
  • 执行heroku logs --tail查看服务器启动日志,确认Express服务正常初始化,无异常中间件加载提示。

3. 排查全局中间件的强制升级逻辑

检查是否存在全局中间件(如自定义安全校验、第三方插件)错误地对所有请求返回426 Upgrade Required响应。可以临时禁用非必要中间件,逐步恢复以定位问题来源。

4. 确认端口配置正确性

确保Express服务器监听Heroku提供的PORT环境变量,而非固定端口:

const port = process.env.PORT || 3000;
server.listen(port, () => {
  console.log(`Server running on port ${port}`);
});

错误的端口配置会导致Heroku路由层无法正确转发HTTP请求,触发异常响应。

5. 调整WebSocket库的传输配置

如果使用socket.io,避免强制仅使用WebSocket传输,允许HTTP轮询作为备选(防止普通HTTP请求被拦截):

const io = require('socket.io')(server, {
  transports: ['websocket', 'polling'],
  path: '/ws'
});

使用ws库时,检查是否设置了可能干扰HTTP路由的选项(如clientTracking: true)。

6. 重置Heroku运行环境

  • 执行heroku restart重启dyno,排除进程状态异常问题。
  • 重新推送代码触发部署,确保最新代码正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:53:10