【问题标题】:How to fix cors policy problem "It does not have HTTP ok status" in Socket.io如何修复 Socket.io 中的 cors 策略问题“它没有 HTTP ok 状态”
【发布时间】:2019-08-21 22:02:07
【问题描述】:

我正在设置 socket.io 服务器,但 cors 策略有问题。例如:如果脚本使用 get 请求一切正常,但在连接到 socket.io 服务器时,此错误会显示在控制台上

从源“https://www.domain.xyz”访问位于“https://ser.domain.xyz/iotCloud/?EIO=3&transport=polling&t=MdKfMsN”的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态。

我认为这是 socket.io 的问题。我尝试了一切,但没有任何效果。


var server = express();

var app = require('http').Server(server);

const io = new socket(app, {
  path   : "/iotCloud",
  origins: 'https://www.domain.xyz'
})

server.use(function(req, res, next){
  res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
  res.header('Access-Control-Allow-Headers', 'Access-Control-Allow-Origin,*');
  res.header('Access-Control-Allow-Credentials', true);
  res.header('Access-Control-Allow-Origin', 'https://www.projectann.xyz');
  next();
})

我也试过这个而不是 server.use



var corsOptions = {
  origin: 'https://www.domain.xyz',
  credentials: true,
  methods: "GET,HEAD,PUT,PATCH,POST,DELETE,OPTIONS",
  preflightContinue: true,
  optionsSuccessStatus: 204,
}

server.use(cors(corsOptions))

客户端 - ServiceWorker

importScripts('../cdn/js/socket.io.js');
var es = {};
     es.socket = io("https://ser.domain.xyz",{
        transportOptions: {
            polling: {
                extraHeaders: {
                    server: "AnnIoT",
                    "loginObject": JSON.stringify(m.data)
                  }
            }
        },
        secure: true,
        rejectUnauthorized: false,
        path: '/iotCloud'
      });


我到处搜索堆栈、github 甚至其他发现此错误的语言。

【问题讨论】:

    标签: javascript node.js socket.io cors


    【解决方案1】:

    一个简单的解决方法是在next()之前添加以下代码

    if (req.method === 'OPTIONS') {
        res.status(200);
    } 
    

    所以最终代码看起来像

    server.use(function(req, res, next){  
       res.header('Access-Control-Allow-Methods',
       'GET,PUT,POST,DELETE,OPTIONS');  
       res.header('Access-Control-Allow-Headers',
       'Access-Control-Allow-Origin,*');  
       res.header('Access-Control-Allow-Credentials', true);  
       res.header('Access-Control-Allow-Origin',
       'https://www.projectann.xyz');
    if (req.method === 'OPTIONS') {
        res.status(200);
    } next(); })
    

    【讨论】:

      猜你喜欢
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2021-05-16
      • 2021-04-26
      • 2019-07-07
      • 2020-07-30
      • 2020-01-29
      相关资源
      最近更新 更多