当我尝试使用额外的标头连接我的服务器时,我收到一个带有消息{"code":2,"message":"Bad handshake method"}
的 400(如果我不尝试添加它就可以正常工作)。
我尝试使用以下配置连接我的服务器:
const options = {
transportOptions: {
polling: {
extraHeaders: {
Authorization: "Bearer test"
}
}
}
};
我还注意到,当我添加这个额外的标头时会发出一个 OPTIONS 请求(而不是当我不添加它时的 GET)
带有不会破坏握手的额外标头的 get GET 请求(以保留 cookie)。
同样的问题,在这里 .. 完全适用于 nodejs 版本的 socket.io-client 虽然不是浏览器
你好! 我认为您必须在服务器端添加正确的标头(似乎您处于 CORS 情况):
const io = require('socket.io')(3000, {
handlePreflightRequest: function (req, res) {
var headers = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': 'http://localhost:3001',
'Access-Control-Allow-Credentials': true
};
res.writeHead(200, headers);
res.end();
}
});
我在那里添加了一个例子: https :
@darrachequesne如何为源指定多个域,以下方法不起作用:
@DaVincii我定义为空,但被释放到任何域。
常量头 = {
'Access-Control-Allow-Headers':'内容类型,授权',
'Access-Control-Allow-Origin':空,
“访问控制允许凭据”:true
};
供 CORS 使用
{
处理预检请求:函数(req,res){
变量头 = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': req.headers.origin ,
“访问控制允许凭据”:true
};
res.writeHead(200, 标题);
重发();
}
}
供 CORS 使用
{
处理预检请求:函数(req,res){
变量头 = {
'Access-Control-Allow-Headers':'内容类型,授权',
'Access-Control-Allow-Origin': req.headers.origin ,
“访问控制允许凭据”:true
};
res.writeHead(200, 标题);
重发();
}
}
“访问控制允许来源”:req.headers.origin
这只是拯救了我的一天! 当我使用:
'Access-Control-Allow-Origin': ' ',它会给我以下错误:"当请求的凭证模式为'include'时
这似乎不再适用于最新的 socket.io。 打字稿不喜欢它。 无论如何要解决?
这似乎不再适用于最新的 socket.io。 打字稿不喜欢它。 无论如何要解决?
@supertiger1234 handlePreflightRequest
在最新版本有不同的界面
所以在你的情况下它应该是:
...
handlePreflightRequest: function(server, req, res) {
var headers = {
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Allow-Origin": config.allowedOrigins,
"Access-Control-Allow-Credentials": true,
};
res.writeHead(200, headers);
res.end();
...
@supertiger1234 handlePreflightRequest 最新版本有不同的接口
⚠️ 如果您现在从 npm 安装 socket.io,您将拥有旧版本,但是如果您安装typings(通过@types),它将拥有新的typings! 这可能是超级误导。
如何安装最新的socket io?
供将来参考:当使用 3.0 后的服务器和 3.0 之前的客户端时,也会出现此问题。 这可能是由于缓存配置错误导致客户端使用旧版本的socket.io.js
。
最有用的评论
你好! 我认为您必须在服务器端添加正确的标头(似乎您处于 CORS 情况):
我在那里添加了一个例子: https :