рдореЗрд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ {"code":2,"message":"Bad handshake method"}
рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде 400 рдорд┐рд▓рддрд╛ рд╣реИ (рдпрджрд┐ рдореИрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рддреЛ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ)ред
рдореИрдВ рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рдореНрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВ:
const options = {
transportOptions: {
polling: {
extraHeaders: {
Authorization: "Bearer test"
}
}
}
};
рдореИрдВрдиреЗ рдпрд╣ рднреА рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рдореИрдВ рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рддреЛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рддреЛ рдЬреАрдИрдЯреА рдХреЗ рдмрдЬрд╛рдп)
рд╣реИрдВрдбрд╢реЗрдХ рдХреЛ рдирд╣реАрдВ рддреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реЗрдбрд░ рдХреЗ рд╕рд╛рде рдПрдХ GET рдЕрдиреБрд░реЛрдз (рдХреБрдХреАрдЬрд╝ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рд╡рд╣реА рдореБрджреНрджрд╛, рдпрд╣рд╛рдВ .. рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реЙрдХреЗрдЯ рдХреЗ рдиреЛрдбрдЬ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рд╛рд▓рд╛рдВрдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ рд╣реИ
рдирдорд╕реНрддреЗ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдЙрдЪрд┐рдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕реАрдУрдЖрд░рдПрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ):
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://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers
@darrachequesne рдореВрд▓ рдХреЗ рд▓рд┐рдП рдПрдХрд╛рдзрд┐рдХ рдбреЛрдореЗрди рдХреИрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:
@DaVincii рдЖрдк рдПрдХрд╛рдзрд┐рдХ рдбреЛрдореЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЗрдбрд░ рдореВрд▓ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЕрдкрдиреА рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЛ
рд╕реНрдЯреИрдХреЛрд╡рдлреНрд▓реЛ рдкрд░ рдЗрд╕реЗ рдФрд░ рдпрд╣ рджреЗрдЦреЗрдВ
@DaVincii рдореИрдВрдиреЗ рд╢реВрдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдбреЛрдореЗрди рд╕реЗ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЙрдиреНрд╕реНрдЯ рд╣реЗрдбрд░ = {
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рд╢реАрд░реНрд╖рд▓реЗрдЦ': 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╛рдзрд┐рдХрд░рдг',
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐': рд╢реВрдиреНрдп,
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдкреНрд░рдорд╛рдг-рдкрддреНрд░': рд╕рддреНрдп
};
рдХреЙрд░реНрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП
{
рд╣реИрдВрдбрд▓рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ: рдлрдВрдХреНрд╢рди (рд░рд┐рдХ, рд░реЗрд╕) {
рд╡рд░ рд╣реЗрдбрд░ = {
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рд╢реАрд░реНрд╖рд▓реЗрдЦ': 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╛рдзрд┐рдХрд░рдг',
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐': req.headers.origin ,
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдкреНрд░рдорд╛рдг-рдкрддреНрд░': рд╕рддреНрдп
};
res.writeHead(200, рд╢реАрд░реНрд╖рд▓реЗрдЦ);
res.end ();
}
}
рдХреЙрд░реНрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП
{
рд╣реИрдВрдбрд▓рдкреНрд░реАрдлреНрд▓рд╛рдЗрдЯ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ: рдлрдВрдХреНрд╢рди (рд░рд┐рдХ, рд░реЗрд╕) {
рд╡рд░ рд╣реЗрдбрд░ = {
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рд╢реАрд░реНрд╖рд▓реЗрдЦ': 'рд╕рд╛рдордЧреНрд░реА-рдкреНрд░рдХрд╛рд░, рдкреНрд░рд╛рдзрд┐рдХрд░рдг',
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐': req.headers.origin ,
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдкреНрд░рдорд╛рдг-рдкрддреНрд░': рд╕рддреНрдп
};
res.writeHead(200, рд╢реАрд░реНрд╖рд▓реЗрдЦ);
res.end ();
}
}
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐': req.headers.origin
рдЗрд╕рдиреЗ рдореЗрд░рд╛ рджрд┐рди рдмрдЪрд╛ рд▓рд┐рдпрд╛! рдЬрдм рдореИрдВрдиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:
'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐ рджреЗрдВ-рдЙрддреНрдкрддреНрддрд┐': ' ',рдпрд╣ рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛:"рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 'рдкрд╣реБрдВрдЪ-рдирд┐рдпрдВрддреНрд░рдг-рдЕрдиреБрдорддрд┐-рдЙрддреНрдкрддреНрддрд┐' рд╢реАрд░реНрд╖рд▓реЗрдЦ рдХрд╛ рдорд╛рди рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП ' ' рдЬрдм рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореЛрдб 'рд╢рд╛рдорд┐рд▓' рд╣реЛрддрд╛ рд╣реИред XMLHttpRequest рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдореЛрдб рдХреЛ withCredentials рд╡рд┐рд╢реЗрд╖рддрд╛ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ред"
рдпрд╣ рдЕрдм рдирд╡реАрдирддрдо 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 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрд░рд╛рдирд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдкрд┐рдВрдЧ (@types рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕рдореЗрдВ рдирдИ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реЛрдЧреА! рдЬреЛ рд╕реБрдкрд░ рднреНрд░рд╛рдордХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдирд╡реАрдирддрдо рд╕реЙрдХреЗрдЯ io рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВрдВ?
рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП: рдпрд╣ рд╕рдорд╕реНрдпрд╛ рддрдм рднреА рд╣реЛрддреА рд╣реИ рдЬрдм рдПрдХ рдкреНрд░реА-3.0 рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдкреЛрд╕реНрдЯ-3.0 рд╕рд░реНрд╡рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдЧрд▓рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдХреИрд╢ рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ socket.io.js
рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИред
рднрд╡рд┐рд╖реНрдп рдХреЗ рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреГрдкрдпрд╛ рджреЗрдЦреЗрдВ:
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдирдорд╕реНрддреЗ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░ рдЙрдЪрд┐рдд рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рд╕реАрдУрдЖрд░рдПрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВ):
рдореИрдВрдиреЗ рд╡рд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рд╛: https://github.com/darrachequesne/socket.io-fiddle/tree/extra-headers