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

.NET Core连接Windows Server部署的Socket.IO服务出现ERR_SSL_PROTOCOL_ERROR

解决方案

ERR_SSL_PROTOCOL_ERROR本质是客户端用HTTPS/WSS协议请求了仅支持HTTP的端口,导致SSL握手失败,可按以下步骤逐一排查解决:

1. 关闭.NET Core默认HTTPS重定向

.NET Core Web项目默认启用HTTPS重定向中间件,会把所有HTTP请求自动跳转至HTTPS端口,你的Socket.IO服务监听的30080是纯HTTP端口,跳转后用HTTPS请求该端口必然触发SSL错误。
打开项目的Program.cs(.NET 6+)或Startup.cs(.NET 5及更早),注释掉如下代码:

// app.UseHttpsRedirection();

2. 匹配Socket.IO客户端版本

你服务端使用的是Socket.IO 3.1.2版本,.NET客户端必须使用对应3.x大版本,版本不兼容会导致握手逻辑异常,出现误报SSL错误的情况。
推荐通过NuGet安装匹配版本的客户端:

Install-Package SocketIOClient -Version 3.0.8

3. 修正.NET端连接代码

Access-Control-Allow-Origin是服务端返回的响应头,客户端不需要主动添加该请求头,多余的自定义头可能触发中间件拦截。参考正确的连接代码:

using SocketIOClient;

// 初始化客户端
var socketClient = new SocketIO("http://你的服务器IP:30080", new SocketIOOptions
{
    WithCredentials = false,
    // 优先指定WebSocket传输,避免HTTP轮询阶段的重定向问题
    Transport = SocketIOTransport.WebSocket
});

// 绑定事件
socketClient.On("connect", () =>
{
    Console.WriteLine("连接成功");
});

socketClient.On("message", response =>
{
    string msg = response.GetValue<string>();
    Console.WriteLine(msg);
});

// 发起连接
await socketClient.ConnectAsync();

4. 排查服务器部署拦截问题

  • 若.NET应用部署在IIS上,需先安装IIS的WebSocket功能,同时检查是否配置了全局反向代理规则,导致30080端口的请求被强制跳转HTTPS
  • 同一台服务器测试时,优先用127.0.0.1代替公网IP,避免端口回流拦截
  • 确认Windows Server防火墙开放了30080端口的入站规则

5. 如需启用HTTPS/WSS的配置方案

如果业务要求使用加密连接,不能直接用现有HTTP端口接HTTPS请求,需要给Node端Socket.IO服务配置SSL证书:

const https = require('https');
const fs = require('fs');
// 加载你的SSL证书和密钥
const options = {
  key: fs.readFileSync('你的私钥路径.key'),
  cert: fs.readFileSync('你的证书路径.crt')
};

const httpServer = https.createServer(options);
// 其余Socket.IO配置保持不变,监听端口可改为30443等自定义端口

配置完成后.NET端用https://你的服务器IP:30443或wss://你的服务器IP:30443连接即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:06:02