gpt4 book ai didi

node.js - WebSocket 连接到 'wss://' WebSocket 握手期间出错 : Unexpected response code: 400

转载 作者:IT老高 更新时间:2023-10-28 23:08:42 26 4
gpt4 key购买 nike

我使用 socket.io在我的node.jsexpress 上运行的应用程序.

本地版本 ( localhost ) 上的一切正常,但是当我切换到生产服务器(使用自定义证书通过 https 提供服务)时,我在浏览器控制台中收到以下错误:

websocket.js:112 WebSocket connection to 'wss://infranodus.com/socket.io/?EIO=3&transport=websocket&sid=j_WBxkPY_RlpF9_ZAANP' failed: Error during WebSocket handshake: Unexpected response code: 400

我进行了一项研究 (issue referenced here),结果发现这是因为我的应用程序/托管服务提供商阻止了 wss 之类的连接。和我的socket.io依靠AJAX发出请求(功能正常,但有时会出现错误)。

所以我想问你是否可以对我的应用程序进行修改以消除此错误?

仅供引用,目前所有对 http://infranodus.com 的请求被转发(通过静态 .htaccess)到 https://infranodus.com和我的app.js文件(服务器激活部分如下所示):

var http = require('http');

var app = express();

var server = http.Server(app);
var io = require('socket.io')(server);

app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');

以及我在前端文件中需要套接字的方式:

<script src="/socket.io/socket.io.js"></script>

然后

var socket = io();

也许问题是我使用 http 在我的 node.js 应用程序中激活服务器而不是 https ?但我不想切换到那个,因为我不知道我的证书存储在哪里,我不想过多地更改后端代码。

更新 (21/10/2018): 我们发现问题是 with nginx server并且由于一些不允许用户编辑 nginx 服务器的托管服务提供商的限制,基于安全协议(protocol)的 websockets 被阻止或出现 400 错误。最好在 sockets.io 中解决这个问题,因为这是许多用户遇到的问题。有什么想法吗?

重现问题:请打开您的 Javascript 控制台并转到 https://infranodus.com/news/english

源代码: https://github.com/noduslabs/infranodus

最佳答案

我用这个解决了:

var socket = io.connect("http://localhost:3000", {
forceNew: true,
transports: ["polling"],
});

关于node.js - WebSocket 连接到 'wss://' WebSocket 握手期间出错 : Unexpected response code: 400,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49575350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com