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