跨域事件源

我正在尝试使用nodejs创build一个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' }); 

我怎样才能正确地做到这一点?

问候

请参阅https://github.com/Yaffle/EventSource – 可以采用polyfill来支持CORS for Firefox,Webkit和IE 8+

允许凭据不能与原始设置为*一起使用。 考虑在你的回应中写入收到的Origin-header

尝试用下面的方块代替你的方块。 浏览器将使用OPTIONS调用一次,然后请求将按照预期进行。

如果你已经打破了请求方法,你将不需要if语句,但是我想给你一个完整的block,以防你像Hello World例子那样托pipe它。

 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) 。 这可能是由于:

  1. 试图通过file:// (不通过节点服务器提供本地文件)访问本地资源
  2. 试图从不允许CORS或者另一台服务器访问资源
  3. 也许你正在从本地文件而不是从你的节点服务器提供的URLtesting页面。