междоменный источник событий - PullRequest
15 голосов
/ 11 июня 2011

Я пытаюсь создать сервер EventSource с помощью nodejs, который будет обрабатывать запросы между доменами.Я отправляю обратно заголовок Access-Control-Allow-Origin, но браузер (ни Chrome, ни Opera) не позволяют мне подключиться.Вот заголовки, которые я отправляю обратно:

this._response.writeHead(200, {
    'Content-Type': 'text/event-stream',
    'Cache-Control': 'no-cache',
    'Connection': 'keep-alive',
    'Access-Control-Allow-Origin': '*',
    'Access-Control-Allow-Credentials': 'true'
});

Как мне сделать это правильно?

С уважением

Ответы [ 4 ]

4 голосов
/ 05 сентября 2011

см. https://github.com/Yaffle/EventSource - можно использовать polyfill для поддержки CORS для Firefox, Webkit и IE 8 +

3 голосов
/ 29 марта 2012

Разрешить учетные данные нельзя использовать, если разрешить источник установлен на *.Подумайте о том, чтобы написать полученный заголовок Origin в вашем ответе

2 голосов
/ 24 августа 2012

Попробуйте следующий блок вместо вашего.Браузер будет вызывать один раз с OPTIONS, после чего запрос будет выполнен, как и ожидалось, после этого.

Вам не понадобится оператор if, если вы отключили методы запроса - но я хотелчтобы получить полный блок на тот случай, если вы разместите его, как в примере Hello World .

if (req.method === "OPTIONS") {
    console.log('!OPTIONS');
    var headers = {};
    // IE8 does not allow domains to be specified, just the *
    // headers["Access-Control-Allow-Origin"] = req.headers.origin;
    headers["Access-Control-Allow-Origin"] = "*";
    headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
    headers["Access-Control-Allow-Credentials"] = false;
    headers["Access-Control-Max-Age"] = '86400'; // 24 hours
    headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
    res.writeHead(200, headers);
    res.end();
}
1 голос
/ 29 марта 2013

Вы получаете Security Exception (SECURITY_ERR: DOM Exception 18), если используете междоменные ресурсы. Это может быть связано с:

  1. пытается получить доступ к локальным ресурсам через file:// (локальные файлы не обслуживаются сервером узла) или
  2. пытается получить доступ к ресурсам с другого сервера, который не поддерживает CORS или
  3. возможно, вы тестируете страницу из локального файла, а не из URL-адреса, полученного с вашего сервера узлов.
...