jquery – 使用带有Node和Express的IE10中的CORS的安全性错误

前端之家收集整理的这篇文章主要介绍了jquery – 使用带有Node和Express的IE10中的CORS的安全性错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个托管在http://example.com上的Backbone应用程序,该应用程序使用https://api.example.com上托管的API.对于API,我使用带有Express.js框架的Node.js.我的CORS解决方案似乎适用于除IE以外的每个主要浏览器(它甚至在IE10中失败).

当从IE10发起请求时,请求永远不会到达API服务器.据我所知,该请求甚至没有被发送.当我使用IE10的开发人员工具检查请求时,请求标头和响应标头都是空白的.当从任何其他浏览器发送请求时,将收到请求并正确生成响应.

这是我在控制台中看到的错误

SCRIPT 7002: XMLHttpRequest: Network Error 0x4c7,The operation was canceled by the user.

该请求使用jQuery:

$.ajax({
  url: apiRoot + "/endpoint",success: function(response) {
    // Omitted irrelevant code
  }
});

根据this文章,默认情况下在IE中禁用CORS并且必须启用CORS:

Internet Explorer ignores Access-Control-Allow headers and by default
prohibits cross-origin access for Internet Zone. To enable CORS go to
Tools->Internet Options->Security tab,click on “Custom Level” button.
Find the Miscellaneous -> Access data sources across domains setting
and select “Enable” option.

果然,当我启用此设置时,请求会通过,一切正常.但是,我已经读过这个设置实际上与CORS无关,不应该影响它.当使用this tool测试CORS兼容性时,无论是启用还是禁用此设置,IE10都会通过,这使我相信CORS已启用,我只是做错了.

此外,当我运行Fiddler时,一切似乎都应该工作,因为Fiddler充当代理.

作为参考,这是服务器端的CORS相关代码

res.header("Access-Control-Allow-Origin","example.com");
res.header("Access-Control-Allow-Methods","GET,PUT,POST,DELETE,OPTIONS");
res.header("Access-Control-Allow-Headers","Content-Type,Authorization,X-File-Name,X-File-Size,X-File-Type");
res.header("Access-Control-Allow-Credentials",true);
if (req.method == "OPTIONS") {
 res.send(200);
}

解决方法

尝试使用HTTP而不是HTTPS将请求发送到API服务器.问题听起来可能与服务器的SSL设置有关,而不是请求本身.如果是这种情况,请尝试使用SSL设置.
var options = {
  key:    fs.readFileSync(key),cert:   fs.readFileSync(certificate),ca:     fs.readFileSync(CA),requestCert:        false,};

https.createServer(options,app).listen(443);

猜你在找的jQuery相关文章