Я использую socket.io и express для создания многопользовательского приложения. Это работало нормально, пока я не захотел создать несколько экземпляров, один из которых содержит целевую страницу, и отдельные, выполняющие каждый проект узла.
Firefox ошибка
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:5002/socket.io/?EIO=3&transport=polling&t=N3Xwg8R. (Reason: CORS request did not succeed).
Chrome ошибка
GET http://localhost:5002/socket.io/?EIO=3&transport=polling&t=N3XwwIP net::ERR_CONNECTION_REFUSED
Сервер
var express = require('express'),
app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server),
path = require('path');
app.use(express.static(path.join(__dirname,"public/multiplayerdrawing")));
server.listen(5002);
Клиент
socket = io('http://localhost:5002')
socket.connect()
socket.on('connect', () => {
console.log("connected");
})
Теперь самое интересное. Что я пробовал В основном из 24058157 ответов.
var io = require('socket.io')(server, { origins: '*:*'});
Нет
io.origins('*:*')
Нет
io.set('origins', '*:*');
Нет
io.set('origins', 'http://mydomain.xyz:5002');
Нет
const io = require("socket.io")(server, {
handlePreflightRequest: (req, res) => {
const headers = {
"Access-Control-Allow-Headers": "Content-Type, Authorization",
"Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to,
"Access-Control-Allow-Credentials": true
};
res.writeHead(200, headers);
res.end();
}
});
Нет
const cors = require('cors');
app.use(cors());
до сих пор нет.
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', req.get('Origin') || '*');
res.header('Access-Control-Allow-Credentials', 'true');
res.header('Access-Control-Allow-Methods', 'GET,HEAD,PUT,PATCH,POST,DELETE');
res.header('Access-Control-Expose-Headers', 'Content-Length');
res.header('Access-Control-Allow-Headers', 'Accept, Authorization, Content-Type, X-Requested-With, Range');
if (req.method === 'OPTIONS') {
return res.send(200);
} else {
return next();
}
});
, вероятно, использовал это неправильно, но я не понимаю.
возможно, это моя nginx конфигурация
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name mysite.xyz www.mysite.xyz;
location ^~ / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
location /multiplayerdrawing {
rewrite ^/multiplayerdrawing/(.*) /$1 break;
proxy_pass http://localhost:5002/multiplayerdrawing; #whatever port your app runs on
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}