代码之家  ›  专栏  ›  技术社区  ›  jstuardo

正在使用套接字与CORS策略斗争。伊奥·诺德斯

  •  0
  • jstuardo  · 技术社区  · 5 年前

    我已经找到了很多关于CORS政策问题的信息,但即使我尝试了我在这里找到的所有解决方案,也没有任何效果。

    我最后一次尝试是在nodejs服务器中:

    var express = require('express');
    var app = express();
    
    var spawn = require('child_process').spawn;
    var fs = require('fs');
    
    app.use(express.static('public'));
    
    const server = require('https').createServer({
        key: fs.readFileSync('/home/example/ssl/keys/c231f_0ca89_7b80bf6d84934d212df326eee9c6319f.key'),
        cert: fs.readFileSync('/home/example/ssl/certs/streaming_desytec_com_c231f_0ca89_1609334228_a73b63988075270c9f680f383b6e6a99.crt')
    }, app);
    
    var io = require('socket.io')(server);
    io.set('origins', 'https://localhost:44356');
    

    尽管我努力解决这个问题,但我总是在套接字中遇到这个错误。io客户端:

    Access to XMLHttpRequest at 'https://streaming.example.com/socket.io/?framespersecond=15&audioBitrate=22050&EIO=3&transport=polling&t=NJbfyAD' from origin 'https://localhost:44356' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

    我怎样才能真正解决这个问题?

    我的网站位于localhost中,nodejs服务器远程运行在linux服务器上。

    编辑:我有最后一次尝试:

    var cors = require('cors')
    
    var corsOptions = {
      origin: 'https://localhost:44356',
      optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
    }
    
    app.use(cors());
    app.get('/socket.io/', cors(corsOptions), function (req, res, next) {
      res.json({msg: 'This is CORS-enabled for all origins!'})
    })
    
    app.use(express.static('public'));
    

    它仍然不起作用。我想知道 app.get 考虑到服务器的URL将是:

    /socket.io/?framespersecond=15&audioBitrate=22050&EIO=3&transport=polling&t=NJbfyAD

    0 回复  |  直到 5 年前
        1
  •  -1
  •   Vahid Alimohamadi    5 年前
    yourapp.use(
      cors({
        origin: (origin, callback) => callback(null, true),
        credentials: true // if using cookies
      })
    );
    

    你可以根据你的环境来控制它。

    推荐文章