【问题标题】:Laravel Socket.io Cross-Origin deniedLaravel Socket.io 跨域被拒绝
【发布时间】:2017-05-18 08:36:37
【问题描述】:

我正在尝试使用 socket.io 部署我的 laravel 应用程序,并且一切都已启动并运行。 Node、redis 等,但是当套接字事件被触发时,我得到了这个确切的错误消息。

XMLHttpRequest cannot load http://localhost/socket.io/?EIO=3&transport=polling&t=Lbe2fnV. Cross-origin redirection denied by Cross-Origin Resource Sharing policy.

我已经进入我的 nginx 配置文件并添加了以下内容:

upstream app_yourdomain {
    server 127.0.0.1:3000;
    keepalive 8;
}
location ~* \.io {
     proxy_pass http://localhost:3000;
     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; 
}

但它什么也没做。

如何摆脱跨域错误? 我最大的成功来自这篇文章

NodeJS server on DigitalOcean using socket.io returns connection refused

【问题讨论】:

    标签: node.js laravel nginx socket.io cors


    【解决方案1】:

    尝试像这样设置 origins 属性。

    io.set('origins', 'http://localhost:3000');
    

    例如,您可以输入您允许从其中获取请求的每个 url

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

    或全部允许

    io.set('origins', '*:*');
    

    More about the origin property can be found here

    【讨论】:

    • 我这样做了,错误消失了,但现在它不起作用。它也不会给出任何错误消息。当我收到套接字时,这就是我要放置的。 var socket = io("http://localhost:3000");
    • @CriticalTheWizard 尝试将 origin 属性设置为 : 只是为了测试目的?之后会起作用吗?
    • 我之前正在工作,我发现我必须输入var socket = io("http://mywebsite.com:3000") ,因为 localhost 实际上正在连接到我正在运行的本地开发服务器。我现在的问题是网站可以连接到套接字(这就是套接字调试器所说的),但它无法接收任何数据。它不断写一个 ping 消息,刷新 1 个数据包,然后获取正确的类型,数据未定义。
    • 这听起来更像是代码错误,您可以发布您的代码吗?或者提出一个新问题?
    猜你喜欢
    • 2016-01-27
    • 2010-12-26
    • 1970-01-01
    • 2021-06-05
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2014-12-27
    相关资源
    最近更新 更多