Saya mendapatkan 400 dengan pesan {"code":2,"message":"Bad handshake method"}
ketika mencoba menghubungkan server saya dengan header tambahan (berfungsi dengan baik jika saya tidak mencoba menambahkannya).
Saya mencoba menghubungkan server saya dengan konfigurasi berikut:
const options = {
transportOptions: {
polling: {
extraHeaders: {
Authorization: "Bearer test"
}
}
}
};
Saya juga memperhatikan bahwa permintaan OPSI dibuat ketika saya menambahkan tajuk tambahan ini (bukan GET ketika saya tidak menambahkannya)
Permintaan get GET (untuk mempertahankan cookie) dengan header tambahan yang tidak merusak jabat tangan.
Masalah yang sama, di sini .. benar-benar berfungsi dengan versi nodejs dari socket.io-client meskipun bukan browser
Hai! Saya pikir Anda harus menambahkan tajuk yang tepat di sisi server (sepertinya Anda berada dalam situasi 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();
}
});
Saya menambahkan contoh di sana: https://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers
@darrachequesne cara menentukan beberapa domain untuk Asal, cara berikut tidak berfungsi:
@DaVincii saya definisikan sebagai nol, tetapi dibebaskan ke domain apa pun.
header const = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': null,
'Access-Control-Allow-Credentials': benar
};
Untuk Penggunaan CORS
{
handlePreflightRequest: function (req, res) {
var header = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': req.headers.origin ,
'Access-Control-Allow-Credentials': benar
};
res.writeHead(200, header);
res.end();
}
}
Untuk Penggunaan CORS
{
handlePreflightRequest: function (req, res) {
var header = {
'Access-Control-Allow-Headers': 'Content-Type, Authorization',
'Access-Control-Allow-Origin': req.headers.origin ,
'Access-Control-Allow-Credentials': benar
};
res.writeHead(200, header);
res.end();
}
}
'Access-Control-Allow-Origin': req.headers.origin
Ini baru saja menyelamatkan hari saya! Ketika saya menggunakan:
'Access-Control-Allow-Origin': ' ',Itu akan memberi saya kesalahan berikut:"Nilai header 'Access-Control-Allow-Origin' dalam respons tidak boleh berupa wildcard ' ' ketika mode kredensial permintaan adalah 'include'. Mode kredensial permintaan yang dimulai oleh XMLHttpRequest dikendalikan oleh atribut withCredentials ."
Ini sepertinya tidak berfungsi lagi dengan socket.io terbaru. TypeScript tidak menyukainya. Pokoknya untuk memperbaiki?
Ini sepertinya tidak berfungsi lagi dengan socket.io terbaru. TypeScript tidak menyukainya. Pokoknya untuk memperbaiki?
@supertiger1234 handlePreflightRequest
memiliki antarmuka yang berbeda di versi terbaru
Jadi dalam kasus Anda seharusnya:
...
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 memiliki antarmuka yang berbeda di versi terbaru
️ Jika Anda menginstal socket.io sekarang dari npm Anda akan memiliki versi lama, tetapi jika Anda menginstal pengetikan (melalui @types) itu akan memiliki pengetikan baru! Yang bisa sangat menyesatkan.
Bagaimana cara menginstal socket io terbaru?
Untuk referensi di masa mendatang: masalah ini juga terjadi saat menggunakan server pasca-3.0 dengan klien pra-3.0. Ini mungkin disebabkan oleh cache yang salah dikonfigurasi yang membuat klien menggunakan versi socket.io.js
.
Untuk pembaca masa depan, silakan lihat:
Komentar yang paling membantu
Hai! Saya pikir Anda harus menambahkan tajuk yang tepat di sisi server (sepertinya Anda berada dalam situasi CORS):
Saya menambahkan contoh di sana: https://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers