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

仅Firefox下WSS over SSL连接失败(错误码1006)技术求助

解决Firefox 80中WebSocket连接错误1006的问题

针对你遇到的Firefox独有的WebSocket连接错误1006(异常关闭),结合你的IIS+iisnode+Express环境,我整理了几个高优先级的排查和修复方向:


1. 检查SSL证书的Firefox兼容性

错误1006常和底层TCP连接断开有关,而Firefox对SSL证书的校验逻辑比Chrome/IE更严格:

  • 在Firefox中直接访问你的HTTPS站点(https://<host>),点击地址栏的锁图标,查看证书详情,确认没有任何警告(比如证书链不完整、使用已废弃的SHA-1算法、Subject Alternative Name(SAN)未包含你的域名)。
  • 如果证书有问题,重新生成符合Firefox要求的证书:确保使用SHA-256及以上签名算法,包含正确的SAN字段,并且完整安装中间证书(避免“证书不受信任”的隐性错误)。

2. 确认iisnode的WebSocket转发配置

虽然你已经禁用了IIS原生WebSocket,但老版本的iisnode(0.2.21是2019年的版本)可能和Firefox的握手逻辑存在兼容问题:

  • 在web.config的<iisnode>节点中添加websocketUpgrade="true"配置,确保iisnode正确转发WebSocket升级请求到Node.js:
    <iisnode websocketUpgrade="true" />
    
  • 尝试升级iisnode到最新的稳定版本(即使官方维护较少,新版本通常会修复浏览器兼容问题)。
  • 检查web.config中的URL重写规则,确保/ws路径的请求没有被IIS拦截,而是正确转发到你的Node.js应用。

3. 修正Express服务器的HTTPS配置(关键排查点)

看你的app.js代码,虽然引入了https模块,但实际用的是app.listen()——这会创建HTTP服务器,而不是HTTPS服务器。如果IIS没有做SSL终止(或者转发逻辑有问题),Firefox可能会拒绝wss连接:

  • 如果IIS处理SSL终止(即IIS负责证书,转发HTTP请求到Node.js):确保Node.js应用监听HTTP端口,且IIS的重写规则正确转发WebSocket请求。
  • 如果Node.js直接处理SSL:需要用https.createServer()加载证书后再监听,示例代码:
    const fs = require('fs');
    const httpsOptions = {
      key: fs.readFileSync('./path/to/private-key.pem'),
      cert: fs.readFileSync('./path/to/certificate.pem'),
      ca: fs.readFileSync('./path/to/ca-bundle.pem') // 若有中间证书需添加
    };
    const server = https.createServer(httpsOptions, app);
    // 注意:WebSocket路由会自动附着在这个HTTPS服务器上
    server.listen(process.env.PORT || 443);
    

4. 优化WebSocket的CORS和请求参数处理

  • CORS配置:虽然你用了cors中间件,但WebSocket的握手请求(HTTP GET)可能需要更宽松的CORS设置。尝试修改cors配置:
    app.use(cors({
      origin: true, // 允许所有合法的Origin
      credentials: true // 允许携带凭证(如果你的连接需要)
    }));
    
  • URL参数编码:Firefox对URL特殊字符的校验更严格,确保所有query参数都用encodeURIComponent编码:
    var socket = new WebSocket(`wss://<host>/ws?request_type=init&usr=${encodeURIComponent(UserID)}&connid=${encodeURIComponent(connectTime)}&pageid=${encodeURIComponent(page_ID)}`);
    

5. 检查Firefox的本地设置

  • 在Firefox地址栏输入about:config,搜索network.websocket.enabled,确保值为true。
  • 检查是否有代理设置影响WebSocket连接(比如公司代理不支持wss),可以尝试关闭代理后测试。

如果以上步骤都没解决问题,可以在Firefox的开发者工具中开启WebSocket的详细日志:

  1. 打开开发者工具 → 设置(齿轮图标)
  2. 勾选“网络”下的“WebSocket日志”
  3. 重新连接WebSocket,查看控制台的详细握手日志,寻找具体的失败原因(比如握手响应异常、证书错误提示等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:57:36