【问题标题】:How to set access control allow origin in socket io如何在套接字 io 中设置访问控制允许来源
【发布时间】:2019-05-08 15:12:48
【问题描述】:

我正在使用 socket.io 和 express js。我想设置访问控制允许来源到套接字连接

我尝试在初始化套接字时设置 origins 属性

var io = require('socket.io')(http, {origins: 'http://www.example.com'})

在上图中,访问控制允许来源设置为 *。我想将其设置为 example.com(还要注意请求方法是 GET)

然而,在此图像中,设置了访问控制允许来源标头(另请注意,请求方法是 POST)

当请求方法为 GET 时,如何添加访问控制允许源头。请帮忙

【问题讨论】:

    标签: javascript express socket.io


    【解决方案1】:

    你试过了吗:

    io.set('origins', 'http://yourdomain.com:80');
    

    或者您也可以尝试server.origins,如下所示:

    io.origins((origin, callback) => {
      if (origin !== 'https://foo.example.com') {
        return callback('origin not allowed', false);
      }
      callback(null, true);
    });
    

    通过返回true,您允许来源。否则,发送错误消息。参考文档here

    【讨论】:

      【解决方案2】:

      请在下面的 express 主文件中尝试

      // 添加标题 app.use(function (req, res, next) {

      // Website you wish to allow to connect
      res.setHeader('Access-Control-Allow-Origin', 'http://yourdomain.com:80');
      
      // Request methods you wish to allow
      res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
      
         // Pass to next layer of middleware
      next();
      

      });

      【讨论】:

        【解决方案3】:

        在 Express 中你可以这样使用:

        app.all('*(or set for what way you exectly need)', function (req, res, next) { res.setHeader('Access-Control-Allow-Origin', 'http://www.example.com'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'your headers'); next(); });

        同样在 socket.io 中,您不需要为 POST 或 GET 单独指定标头...这是一种不同的通信协议。 这是您可以尝试的套接字集示例:

        io.set( 'origins', '*www.example.com' );

        【讨论】:

          【解决方案4】:
          Access-Control-Allow-Origin: http://example.com
          Access-Control-Allow-Methods: GET
          Access-Control-Allow-Headers: Content-Type
          

          【讨论】:

          • 嗨!虽然这可能是该问题的解决方案,但 SO 上通常不鼓励仅使用代码回答。请花一些时间编辑您的回复,并解释为什么这是一个解决方案,因为它将帮助 OP 和该网站的未来访问者。
          猜你喜欢
          • 2020-05-14
          • 1970-01-01
          • 2011-09-18
          • 1970-01-01
          • 2017-10-15
          • 1970-01-01
          • 2018-09-16
          • 2012-09-05
          • 1970-01-01
          相关资源
          最近更新 更多