Источник междоменного события

Я пытаюсь создать сервер 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'
});

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

Привет

Ответы

Ответ 2

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

Ответ 3

Попробуйте использовать следующий блок вместо своего. Браузер будет вызывать один раз с 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();
}

Ответ 4

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

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