Ответ 1
см. https://github.com/Yaffle/EventSource - polyfill можно использовать для поддержки CORS для Firefox, Webkit и IE 8 +
Я пытаюсь создать сервер 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'
});
Как я могу сделать это правильно?
Привет
см. https://github.com/Yaffle/EventSource - polyfill можно использовать для поддержки CORS для Firefox, Webkit и IE 8 +
Разрешить учетные данные не могут использоваться, если для параметра origin установлено значение *. Рассмотрите возможность записи полученного заголовка Origin в ответ
Попробуйте использовать следующий блок вместо своего. Браузер будет вызывать один раз с 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();
}
Вы получаете Security Exception (SECURITY_ERR: DOM Exception 18)
, если используете ресурсы кросс-домена. Это может быть связано с:
file://
(локальные файлы, не обслуживаемые сервером node) или