【问题标题】:Socket IO - Chrome Extension CORSSocket IO - Chrome 扩展 CORS
【发布时间】:2017-09-19 19:17:47
【问题描述】:

我正在开发一个使用套接字 IO 与后端服务器通信的 chrome 扩展。问题是我的连接似乎被跨源策略阻止了。

我的服务器在本地主机上运行,​​我从本地目录加载的 chrome 扩展有一些其他的“来源”标头,因此我的请求被阻止了。

如何允许来自本地 chrome 扩展的套接字 IO 连接?

请求:

https://localhost:8000/socket.io/?EIO=3&transport=polling&t=LkNvOuH net::ERR_CONNECTION_CLOSED

标题:

Provisional headers are shown
Accept:*/*
Origin:chrome-extension://acgnndapfmilgphkhkdkipfiipikkjki
Referer:https://docs.google.com/presentation
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36

【问题讨论】:

    标签: google-chrome-extension socket.io


    【解决方案1】:

    您可能想查看documentation,它展示了如何正确集成 Socket.IO。

    详细来说,Socket.IO由两部分组成:

    • 与 Node.JS HTTP 服务器集成(或安装在其上)的服务器:socket.io
    • 在浏览器端加载的客户端库:socket.io-client

    还要注意,在开发过程中,socket.io 会自动为客户端服务,因此您只需安装一个模块:

    npm install --save socket.io
    

    这将安装模块并将依赖项添加到package.json。编辑index.js 以添加它:

    var app = require('express')();
    var http = require('http').Server(app);
    var io = require('socket.io')(http);
    
    app.get('/', function(req, res){
      res.sendFile(__dirname + '/index.html');
    });
    
    io.on('connection', function(socket){
      console.log('a user connected');
    });
    
    http.listen(3000, function(){
      console.log('listening on *:3000');
    });
    

    此外,

    请注意,当我调用 io() 时,我没有指定任何 URL,因为它默认尝试连接到为页面提供服务的主机。

    最后,您可能还想查看此thread 或此相关SO post 中的建议解决方案。

    【讨论】:

      【解决方案2】:

      如果您在后端使用 Express 框架,我通过将 cors 中间件添加到服务器来解决它,并添加了这一行 app.use(cors())

      【讨论】:

        猜你喜欢
        • 2015-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-12
        • 1970-01-01
        • 2015-08-17
        • 2018-08-20
        相关资源
        最近更新 更多