如何在节点 js 中使用 ws 库为 Web 套接字启用 CORS?
How to enable CORS for web sockets using ws library in node js?
我是节点 js 和网络套接字的新手。我正在尝试使用节点 js 中的 ws 创建一个网络套接字。
我有两个问题:
- 我确实知道 CORS 不适用于网络套接字,但我仍然可以启用它们吗?
- 如何扩展代码以实现客户端身份验证?目前,我可以使用“wss”,但我想使用证书对客户端进行身份验证。我该怎么做?
Server.js代码
const { WebSocketServer } = require('ws');
const { createServer } = require('https');
const { readFileSync } = require('fs');
function startServer() {
const server = createServer({
cert: readFileSync('server_cert.pem'),
key: readFileSync('server_key.pem'),
});
const wss = new WebSocketServer({ noServer: true });
server.on('upgrade', (request, socket, head) => {
authenticate(request, (err, client) => {
if (err || !client) {
socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
socket.destroy();
return;
}
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request, client);
});
});
});
server.listen(7070);
}
有人可以指导我吗?
我使用以下服务器端代码实现了 CORS 验证和基于证书的客户端身份验证:
const server = createServer({
cert: readFileSync(config.certs.sslCertPath),
key: readFileSync(config.certs.sslKeyPath),
ca: [readFileSync(config.certs.caCertPath)],
requestCert: true,
});
const wss = new WebSocketServer({ noServer: true });
server.on('upgrade', (request, socket, head) => {
const origin = request && request.headers && request.headers.origin;
const corsRegex = /^https?:\/\/(.*\.?)abc\.com(:\d+)?\/$/g
if (origin && origin.match(corsRegex) != null) {
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request);
});
} else {
socket.destroy();
}
});
我是节点 js 和网络套接字的新手。我正在尝试使用节点 js 中的 ws 创建一个网络套接字。 我有两个问题:
- 我确实知道 CORS 不适用于网络套接字,但我仍然可以启用它们吗?
- 如何扩展代码以实现客户端身份验证?目前,我可以使用“wss”,但我想使用证书对客户端进行身份验证。我该怎么做?
Server.js代码
const { WebSocketServer } = require('ws');
const { createServer } = require('https');
const { readFileSync } = require('fs');
function startServer() {
const server = createServer({
cert: readFileSync('server_cert.pem'),
key: readFileSync('server_key.pem'),
});
const wss = new WebSocketServer({ noServer: true });
server.on('upgrade', (request, socket, head) => {
authenticate(request, (err, client) => {
if (err || !client) {
socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
socket.destroy();
return;
}
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request, client);
});
});
});
server.listen(7070);
}
有人可以指导我吗?
我使用以下服务器端代码实现了 CORS 验证和基于证书的客户端身份验证:
const server = createServer({
cert: readFileSync(config.certs.sslCertPath),
key: readFileSync(config.certs.sslKeyPath),
ca: [readFileSync(config.certs.caCertPath)],
requestCert: true,
});
const wss = new WebSocketServer({ noServer: true });
server.on('upgrade', (request, socket, head) => {
const origin = request && request.headers && request.headers.origin;
const corsRegex = /^https?:\/\/(.*\.?)abc\.com(:\d+)?\/$/g
if (origin && origin.match(corsRegex) != null) {
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request);
});
} else {
socket.destroy();
}
});