我正在尝试使用nodejs创建一个EventSource服务器,这将服务器跨域请求。我发送回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'
});
我怎样才能以正确的方式做到这一点?
此致
答案 0 :(得分:4)
参见https://github.com/Yaffle/EventSource - 可以采用polyfill来支持Firefox,Webkit和IE 8 +的CORS
答案 1 :(得分:3)
允许凭据不能与allow origin设置为*一起使用。 考虑在回复中编写收到的Origin-header
答案 2 :(得分:2)
尝试使用以下块代替您的。浏览器将使用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();
}
答案 3 :(得分:1)
如果您使用跨域资源,则会获得Security Exception (SECURITY_ERR: DOM Exception 18)
。这可能是由于:
file://
(本地文件未通过节点服务器提供)或