Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Internet Explorer跨域:不发送飞行前_Javascript_Angularjs_Internet Explorer_Ssl_Internet Explorer 11 - Fatal编程技术网

Javascript Internet Explorer跨域:不发送飞行前

Javascript Internet Explorer跨域:不发送飞行前,javascript,angularjs,internet-explorer,ssl,internet-explorer-11,Javascript,Angularjs,Internet Explorer,Ssl,Internet Explorer 11,我发现了几条类似的线索。然而,似乎还没有一个起作用 问题 在我们当前的生态系统中,我们有三台服务器用于http API。两个用于测试,一个用于生产 最近,我们使用AngularJS发布了客户端web应用程序。由于客户端应用程序是为我们的客户提供的,因此与我们的api的通信是跨域的。web应用程序在Chrome、safari和firefox以及所有API中正常运行。但是,对于第三个api,Internet Explorer(11)拒绝发送飞行前(选项)请求,这将禁用客户端与api通信。在另外两个A

我发现了几条类似的线索。然而,似乎还没有一个起作用

问题

在我们当前的生态系统中,我们有三台服务器用于http API。两个用于测试,一个用于生产

最近,我们使用AngularJS发布了客户端web应用程序。由于客户端应用程序是为我们的客户提供的,因此与我们的api的通信是跨域的。web应用程序在Chrome、safari和firefox以及所有API中正常运行。但是,对于第三个api,Internet Explorer(11)拒绝发送飞行前(选项)请求,这将禁用客户端与api通信。在另外两个API中,web应用程序在IE中运行良好

API如下所示:

https://api.doma.in/accesstoken -- Works in IE11
https://api2.doma.in/accesstoken -- Works in IE11
https://api3.doma.in/accesstoken -- Does not send preflight in IE11.
需要注意的是,这三台服务器或多或少都是克隆的,因此设置不会有太大差异

但是,我在收到的错误消息中收到的错误如下:

SEC7118: XMLHttpRequest https://api3.doma.in/accesstoken required CORS (Cross Origin Resource Sharing).
SEC7119: XMLHttpRequest https://api3.doma.in/accesstoken required CORS Preflight.
SCRIPT7002: XMLHttpRequest Network error 0x80070005, Access Denied.

在网络日志中,它只显示飞行前请求被取消,因此没有请求或响应头。

我能够使用openssl识别问题。通过运行
$openssl s_client-connect:443-state
,我发现了一个ssl错误

Api 1和2在openssl的结果中显示了以下内容:

SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A
在api 3(失败的api服务器)上,结果显示了两个附加操作:

SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange A
SSL_connect:SSLv3 read server certificate request A //This
SSL_connect:SSLv3 read server done A
SSL_connect:SSLv3 write client certificate A //This
SSL_connect:SSLv3 write client key exchange A
SSL_connect:SSLv3 write change cipher spec A
SSL_connect:SSLv3 write finished A
SSL_connect:SSLv3 flush data
SSL_connect:SSLv3 read finished A 

但是我还没有在服务器上解决这个问题。与此同时,我正在使用xdomain“hack”()。它的设置非常简单,工作正常

添加更多关于根本原因的详细信息,并节省其他人花费数小时/天的时间进行调查

在我的例子中,IE11遵循了正确的规范,在发出CORS飞行前请求时没有发送客户端证书。

规范的这一部分在Chrome和其他浏览器中被忽略,它们确实发送客户端证书

在我的例子中,我们使用的是Pivotal Cloud Foundry,必须进行配置更改以确保连接不会被拒绝。

要轻松验证这是否是您的问题,请下载并安装fiddler,将其配置为支持HTTPs并再次测试损坏的COR, 我的工作与Fiddler,但没有直接连接到远程服务器