2017-01-23 34 views
-1

当我发出$ http.post请求并将“withCredentials”属性设置为true时。 我的要求适用于Chrome和Fiefox。但是,我在IE中收到以下错误:

XMLHttpRequest:网络错误0x80070005,访问被拒绝。

我注意到,如果我在IE中启用了“访问跨域数据资源”设置,则错误得到解决。不过,我需要找到一种替代解决方案,因为我不能要求用户明确启用该设置。

IE Setting that fixes the issue 我注意到,对同一个域的$ http.get请求在IE中没有问题,问题仅在于$ http.post请求,Options请求获得了500个内部服务器,而我看到请求和响应头如下:

request headers in IE response headers in IE 注: 我确实有必要的自定义标题,我可以看到他们在Chrome当OPTIONS请求成功。我看到的头在Chrome中列举如下:

Chrome request and response headers

可否请你让我知道如果我失去了一些东西,这将使在IE中要求工作,而不必使跨域访问数据源?

+0

您正在测试什么版本的IE? – Stafree

+0

这是IE 11,但我试图切换到IE 10,9,8,7在调试器的模拟器选项卡,我得到相同的错误 – user3916117

+0

显然你的服务器没有正确响应OPTIONS请求。修复服务器。 –

回答

1

Internet Explorer 9不支持CORS请求中的Cookie。参数$httpwithCredentials属性尝试发送Cookie。我不认为有任何方法来解决它与标题。 IE10 + 应该默认工作,只要确保你没有在兼容模式。 CORS在IE10中还没有完全实现,但是您试图执行的请求类型应该可以工作。

您没有提及您的网络应用程序的性质,但它会影响您需要用于IE9的解决方法类型。如果可能的话,看看你是否可以重构代码来使用GET请求(再次,我不知道你想通过AJAX做什么,所以这可能是不可能的)。

您可以使用Modernizr或类似的东西来检测浏览器是否支持CORS。如果不支持,请发送没有AJAX的请求并刷新页面。

如果您真的想使用AJAX,另一种方法是在您的Web服务器上设置一个代理,即同一个域上的服务器。不是直接创建交叉源请求,而是向同源服务器发出AJAX请求,然后向同源服务器请求交叉源服务器。服务器不会有CORS问题。当然,这个解决方案假设您有一些服务器端脚本,例如PHP,Node或Java。

+0

OP询问的请求的类型关于不能使用默认的IE9设置。我不确定在这种情况下我所说的任何事情都是不准确的。 – Stafree

+0

具体来说就是使用cookies(withCredentials in Angular)。请参阅:http://stackoverflow.com/questions/10941281/make-a-cors-request-in-ie9-with-cookies – Stafree

+0

当然,answser编辑。 – Stafree

相关问题