Socket.io access-control-allow = ошибка источника с удаленного сайта - PullRequest
7 голосов
/ 18 июля 2011

Я пытаюсь получить доступ к серверу socket.io с другого сайта.Это работало в течение нескольких недель, но теперь я продолжаю получать следующую ошибку.Это происходит при доступе к серверу на нодстере с сервера на геройку.Ошибка:

XMLHttpRequest cannot load http://site2.nodester.com/socket.io/xhr-polling//1311008802545. 
Origin http://site1.heroku.com is not allowed by Access-Control-Allow-Origin.
Resource interpreted as Script but transferred with MIME type text/plain.
Uncaught SyntaxError: Unexpected identifier

Вот как я соединяюсь с сокетом:

socket = new io.Socket(
    'site2.nodester.com', {port: 80, rememberTransport: false}
);

А вот код сервера:

// requires

server = http.createServer(function(req, res){
    // server stuffs
}),

server.listen(8362);

var io = io.listen(server),

// io code

Ответы [ 8 ]

5 голосов
/ 20 июля 2011

Вы настроили socket.io для использования по умолчанию origins = * или хотя бы поставили origins = site1.heroku.com

4 голосов
/ 02 июня 2014

Проблема, с которой я столкнулся, заключалась в обслуживании клиента socket.io.js из другого места.

Эту проблему можно избежать, подав файл js клиента с того же сервера, к которому вы пытаетесь подключиться..

например, мой первоначальный код клиента был таким, и он выдавал ошибку

<script src="/socket.io/socket.io.js"></script>
var socket = io.connect('http://mydomain.com/');

, как только я изменил его, он работал нормально.

<script src="http://mydomain.com/socket.io/socket.io.js"></script>
var socket = io.connect('http://mydomain.com/');

И мой код сервера,

var express = require('express');
var app = express();
app.use(function(req, res, next) {
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "X-Requested-With");
        res.header("Access-Control-Allow-Headers", "Content-Type");
        res.header("Access-Control-Allow-Methods", "PUT, GET, POST, DELETE, OPTIONS");
        next();
    });
var server = http.createServer(app);
io = socketio.listen(server, {log:false, origins:'*:*'});
... //io.connect and events below
3 голосов
/ 09 мая 2014

Это сработало для меня

var app = require('express')()
  , server = require('http').createServer(app)
  , sio = require('socket.io');     

var io = sio.listen(server, { origins: '*:*' });
3 голосов
/ 03 мая 2012

Это может быть не совсем связано, но может в конечном итоге помочь некоторым бедным душам в этом вопросе:

Я только что столкнулся с тем, что запускает клиент с локального диска (по крайней мере, в Windows), например. file:///c:/... приводит к нулевому источнику, что приведет к сбою проверки происхождения. Попробуйте загрузить клиент на удаленный веб-сайт и запустить его оттуда. Оставьте происхождение на : .

Надеюсь, это поможет некоторым людям.

3 голосов
/ 23 июля 2011

У меня та же проблема, и я не могу решить ее.

Я тестирую множество конфигураций:

  io.set("origins","*");
  io.set('transports', [
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
  ]);

или

  io.set("origins = *");
  io.set('transports', [
    'websocket'
  , 'flashsocket'
  , 'htmlfile'
  , 'xhr-polling'
  , 'jsonp-polling'
  ]);

или

var socket  = io.listen(appS1,{origins: '*:*'});

спасибо за помощь:)

0 голосов
/ 23 июля 2014

Я решил это, изменив одну строку кода клиента.

Я изменил

var socket = io('localhost');

до

var socket = io();
0 голосов
/ 21 июня 2013

Простой обходной путь (благодаря mattcodez ):

io = io.listen(8888); io.server.removeListener('request', io.server.listeners('request')[0]);

Существует открытая ошибка для этой проблемы, и вы можете прочитать больше об этом здесь :

0 голосов
/ 22 марта 2012

Я решил проблему, загрузив клиентский файл socket.io.js с самого сервера, а не поддерживая локальную копию на сайте.В моей настройке есть веб-страница на определенном веб-сайте, которая извлекает файл с сервера, который находится в другом месте.

...