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

如何通过Nuxt 3 Nitro Server正确代理WebSocket连接?

Nuxt3 Nitro代理WebSocket认证失败的解决思路

你的问题核心是Nitro代理WebSocket时没正确处理握手流程,导致后端触发EOFException,连接以1006状态关闭。直接连后端正常说明后端WebSocket配置没问题,问题出在Nitro的代理配置或拦截逻辑上,给你几个排查修复点:

  • 必须开启Nitro代理的WebSocket支持
    在nuxt.config.ts的nitro代理配置里,必须加上ws: true——默认Nitro代理不会自动处理WebSocket升级请求。示例配置:

    export default defineNuxtConfig({
      nitro: {
        proxy: {
          '/ws-proxy': {
            target: 'http://localhost:8080',
            ws: true, // 关键配置,启用WebSocket代理
            changeOrigin: true,
            onReq: (req) => {
              // 在这里注入Authorization头
              req.headers['Authorization'] = 'Bearer ' + yourSessionToken;
            }
          }
        }
      }
    });
    
  • 不要在拦截逻辑中读取请求体
    如果用了Nitro的server middleware拦截WebSocket请求,绝对不能调用await readBody(req)这类读取请求体的方法。WebSocket握手是HTTP GET请求,没有请求体,强行读取会导致连接挂起,后端收不到完整握手信号就会触发EOFException,直接断开连接。

  • 确保WebSocket握手头完整转发
    握手阶段的关键头(Upgrade、Connection、Sec-WebSocket-Key、Sec-WebSocket-Version)必须完整转发给后端。如果是自定义拦截逻辑,不要过滤这些头;Nitro开启ws: true后会自动处理这些头的转发,无需手动修改。

  • 后端握手拦截器不要读取请求体
    检查Spring Boot的WebSocket握手拦截器,确保处理Authorization认证时,只从请求头获取token,不要尝试读取请求体,否则同样会触发EOFException。

按这几点调整后,代理的WebSocket连接应该能正常建立。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:31:02