Ich erhalte eine 400 mit der Meldung {"code":2,"message":"Bad handshake method"}
wenn ich versuche, meinen Server mit einem zusĂ€tzlichen Header zu verbinden (funktioniert gut, wenn ich nicht versuche, ihn hinzuzufĂŒgen).
Ich versuche, meinen Server mit der folgenden Konfiguration zu verbinden:
const options = {
transportOptions: {
polling: {
extraHeaders: {
Authorization: "Bearer test"
}
}
}
};
Mir ist auch aufgefallen, dass eine OPTIONS-Anfrage gestellt wird, wenn ich diesen zusĂ€tzlichen Header hinzufĂŒge (anstelle eines GET, wenn ich ihn nicht hinzufĂŒge).
Eine Get GET-Anfrage (zum Beibehalten von Cookies) mit den zusÀtzlichen Headern, die den Handshake nicht unterbrechen.
Gleiches Problem, hier.. funktioniert vollstÀndig mit der nodejs-Version von socket.io-client, jedoch nicht mit dem Browser
Hallo! Ich denke, Sie mĂŒssen serverseitig die richtigen Header hinzufĂŒgen (anscheinend befinden Sie sich in einer CORS-Situation):
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();
}
});
Ich habe dort ein Beispiel hinzugefĂŒgt: https://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers
@darrachequesne wie man mehrere DomĂ€nen fĂŒr den Ursprung angibt, die folgenden Methoden funktionieren nicht:
@DaVincii habe ich als null definiert, wird aber fĂŒr jede Domain freigegeben.
const-Header = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Zugriffskontrolle-Erlauben-Ursprung': null,
'Zugriffskontrolle-Zulassen-Anmeldeinformationen': true
};
FĂŒr CORS-Nutzung
{
handlePreflightRequest: Funktion (req, res) {
var-Header = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': req.headers.origin ,
'Zugriffskontrolle-Zulassen-Anmeldeinformationen': true
};
res.writeHead(200, Header);
erneut senden();
}
}
FĂŒr CORS-Nutzung
{
handlePreflightRequest: Funktion (req, res) {
var-Header = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': req.headers.origin ,
'Zugriffskontrolle-Zulassen-Anmeldeinformationen': true
};
res.writeHead(200, Header);
erneut senden();
}
}
'Access-Control-Allow-Origin': req.headers.origin
Das hat mir gerade den Tag gerettet! Als ich verwendet habe:
'Zugriffskontrolle-Erlauben-Ursprung': ' ',Es wĂŒrde mir folgenden Fehler geben:"Der Wert des 'Access-Control-Allow-Origin'-Headers in der Antwort darf nicht der Platzhalter ' ' sein, wenn der Credentials-Modus der Anfrage 'include' ist. Der Credentials-Modus von Anfragen, die von XMLHttpRequest initiiert werden, wird durch das withCredentials-Attribut gesteuert ."
Dies scheint mit dem neuesten socket.io nicht mehr zu funktionieren. Typoskript mag es nicht. Trotzdem reparieren?
Dies scheint mit dem neuesten socket.io nicht mehr zu funktionieren. Typoskript mag es nicht. Trotzdem reparieren?
@supertiger1234 handlePreflightRequest
hat eine andere OberflÀche in der neuesten Version
In deinem Fall sollte es also sein:
...
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 hat in der neuesten Version eine andere Schnittstelle
â ïž Wenn Sie socket.io jetzt von npm installieren, haben Sie eine alte Version, aber wenn Sie Typisierungen installieren (ĂŒber @types), hat es neue Typisierungen! Was super irrefĂŒhrend sein kann.
Wie installiere ich das neueste Socket io?
Zur spĂ€teren Bezugnahme: Dieses Problem tritt auch auf, wenn ein Server nach 3.0 mit einem Client vor 3.0 verwendet wird. Dies kann durch einen falsch konfigurierten Cache verursacht werden, der dazu fĂŒhrt, dass die Clients eine Ă€ltere Version von socket.io.js
.
FĂŒr zukĂŒnftige Leser siehe:
Hilfreichster Kommentar
Hallo! Ich denke, Sie mĂŒssen serverseitig die richtigen Header hinzufĂŒgen (anscheinend befinden Sie sich in einer CORS-Situation):
Ich habe dort ein Beispiel hinzugefĂŒgt: https://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers