サーバーを追加のヘッダーで接続しようとすると、 {"code":2,"message":"Bad handshake method"}
というメッセージが表示された400が表示されます(追加しようとしない場合は正常に機能します)。
次の構成でサーバーを接続しようとしています。
const options = {
transportOptions: {
polling: {
extraHeaders: {
Authorization: "Bearer test"
}
}
}
};
また、この追加ヘッダーを追加すると(追加しない場合はGETではなく)、OPTIONSリクエストが行われることに気付きました。
ハンドシェイクを中断しない追加のヘッダーを含むgetGETリクエスト(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 iはnullとして定義されていますが、任意のドメインに解放されます。
constヘッダー= {
'Access-Control-Allow-Headers': 'Content-Type、Authorization'、
'Access-Control-Allow-Origin':null、
'Access-Control-Allow-Credentials':true
};
CORSで使用する場合
{{
handlePreflightRequest:function(req、res){
var headers = {
'Access-Control-Allow-Headers': 'Content-Type、Authorization'、
'Access-Control-Allow-Origin':req.headers.origin、
'Access-Control-Allow-Credentials':true
};
res.writeHead(200、ヘッダー);
res.end();
}
}
CORSで使用する場合
{{
handlePreflightRequest:function(req、res){
var headers = {
'Access-Control-Allow-Headers': 'Content-Type、Authorization'、
'Access-Control-Allow-Origin':req.headers.origin、
'Access-Control-Allow-Credentials':true
};
res.writeHead(200、ヘッダー);
res.end();
}
}
'Access-Control-Allow-Origin':req.headers.origin
これはちょうど私の日を救った! 私が使用したとき:
'Access-Control-Allow-Origin': ' '、次のエラーが発生します。"リクエストのクレデンシャルモードが 'include'の場合、であってはなりません。XMLHttpRequestによって開始されたリクエストのクレデンシャルモードは、withCredentials属性によって制御されます。 。」
これは、最新のsocket.ioでは機能しなくなったようです。 Typescriptはそれが好きではありません。 とにかく修正しますか?
これは、最新のsocket.ioでは機能しなくなったようです。 Typescriptはそれが好きではありません。 とにかく修正しますか?
@ 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をインストールすると古いバージョンになりますが、(@ typesを介して)タイピングをインストールすると新しいタイピングになります! これは非常に誤解を招く可能性があります。
最新のソケットioをインストールするにはどうすればよいですか?
今後の参考のために:この問題は、3.0より前のクライアントで3.0より後のサーバーを使用している場合にも発生します。 これは、クライアントが古いバージョンのsocket.io.js
使用するようにキャッシュが正しく構成されていないことが原因である可能性があります。
最も参考になるコメント
こんにちは! サーバー側に適切なヘッダーを追加する必要があると思います(CORSの状況にあるようです)。
そこに例を追加しました: https :