socket.io/ express 'Запрос перекрестного источника заблокирован' с firefox и 'ERR_CONNECTION_REFUSED' в chrome - PullRequest
0 голосов
/ 16 марта 2020

Я использую 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...