sailsjs cors坏请求仍然通过控制器

所以我的cors.js文件看起来像

module.exports.cors = { allRoutes: true, origin: require('./local.js').hosts, // this is 'http://localhost' } 

然后,我select了一个随机的网站来请求,在这种情况下: http : //tools.pingdom.com/fpt/

这是我的要求和页面的响应

$ .post(' http:// localhost:1337 / gift / create ')Object {readyState:1,getResponseHeader:function,getAllResponseHeaders:function,setRequestHeader:function,overrideMimeType:function …} jquery-2.1.1.min.js :4 POST http:// localhost:1337 / gift / create (index):1 XMLHttpRequest无法加载http:// localhost:1337 / gift / create 。 “Access-Control-Allow-Origin”标题包含无效值“'。 Origin'http: //tools.pingdom.com '因此不被允许访问。

但是,我仍然在控制台中获取错误,因为控制器function仍然被调用。

 sails> error: Sending 500 ("Server Error") response: TypeError: Cannot read property 'email' of undefined 

如果失败,我会认为Cors应该结束连接。

我错过了一个设置?

这是这篇文章的副本CORS:预检通行证,主要请求完成W / 200,但浏览器仍然有原产地错误,但似乎并没有解决。 我们知道为什么这个post还在继续吗?

这是响应头

 Access-Control-Allow-Credentials:true Access-Control-Allow-Origin: Connection:keep-alive Content-Length:2 Content-Type:application/json; charset=utf-8 Date:Wed, 28 Jan 2015 15:56:51 GMT Set-Cookie:sails.sid=s%3A5TJr82PCN-Tas2GrfKkhooEB.IWwc75iQUPRYoR7qWSep6xc%2BSLUkOV0IQe0w63GDYrQ; Path=/; HttpOnly X-Powered-By:Sails <sailsjs.org> 

没有访问控制允许来源集。 我可以为此做一个策略,但这是Sails中的错误吗?

首先,你永远不应该得到500错误,因为在使用它们之前,你应该validation控制器代码中的那些字段!

至于请求仍在处理,尽pipe你的CORS设置:你所看到的是预期的行为,但我同情你的困惑。 以下是您必须了解的有关CORS和POST请求的信息:

POST请求不会触发来自浏览器的预检请求,只要它们使用像application/x-www-form-urlencoded这样的通用内容types标题即可

其原因是,长期以来,常规的旧HTML表单被允许自由发布到不同的来源。 当你做一个常规的jQuery $.post ,它使用相同的内容types,所以服务器无法区分它和普通forms的POST,并让它通过。 浏览器收到空的Access-Control-Allow-Origin头文件后,说:“没有办法Jose”,拒绝显示响应,但是到那时船已经航行 – POST请求已经被处理。

如果您不希望Sails处理来自非白名单源的任何请求,则可以将CORSconfiguration中的securityLevel设置为1 (高)或2 (非常高):

 module.exports.cors = { allRoutes: true, origin: require('./local.js').hosts, // this is 'http://localhost', securityLevel: 1 } 

这将导致Sails返回一个403响应来自不允许的域的任何请求。 highvery high的差别在于high仍然允许来自不同协议的跨域请求(所以你的邮递员请求仍然可以工作),而very highlocking所有的东西。