繁体   English   中英

jQuery ajax调用https URL时访问被拒绝错误

[英]Access is Denied error on jQuery ajax call to https URL

我正在尝试设置一个客户端脚本,以对另一个域上的Web服务进行Ajax调用,以使Web服务的复杂性变为HTTPS。 该服务是MVC4 WebApi(REST)。 客户端脚本也从HTTPS域运行。 尝试拨打电话时,出现“访问被拒绝”错误。 例如,我有一个脚本运行在https://domain_a.com/clientpage/script.js并调用https://domain_b.com/serviceapi/method/,Ajax错误回调报告“访问被拒绝”错误。 我采用了这种精确的方案,并在混合使用中不使用SSL的情况下进行了测试,因此将http转换为http,然后进行ajax调用也可以,我还设置了$ .support.cors = true,还尝试了ajax选项中的crossDomain:true。 这应该与https一起使用吗?我是否缺少某些内容?或者这根本行不通吗? 有什么建议么?

这是我的ajax调用的示例:

$.support.cors = true;

$.ajax({
   url: requestURL,
   crossDomain: true,
   type: "GET",
   headers: { "Authentication": "user@domain.com:" + hashcode },
   data: "{}",
   contentType: "application/json; charset=utf-8",
   dataType: "json",
   success: function (data) {
      alert("call succeeded");
   },
   error: function (response) {
      alert("call failed");
   }
});

jQuery版本:1.10.2
浏览器:IE9(希望它可以与多种浏览器一起使用:chrome,firefox,safari)
Web服务:MVC4 WebAPI .NET 4.5

更新:

我进行了更多测试,并排除了Web服务的问题,它似乎是基础xmlhttprequest对象或浏览器的问题。 我在测试https到https场景时运行了提琴手(提琴手设置为解密https流量,并且对此进行了测试),当我尝试进行ajax调用而失败时,则没有任何流量。 这使我相信它的浏览器。 这是我测试过的场景和结果的列表:
http到http,相同域:成功
http到http,不同的域:成功
https到https,相同的域:成功
https到https,不同的域:失败。 <<-我希望这将是Web服务使用的最常见方案之一,某些ISV使从其他域调用该服务的客户可以使用该服务,并且他们希望使用SSL。

有时,在开发环境中进行开发时,大多数公司不会花钱购买ssl证书,而是使用自签名证书,这会导致浏览器抛出警告的红色大屏幕,您必须继续。 在Chrome中,我知道您使用iframe进行此类操作时,除非我在该会话期间接受证书,否则它会使iframe窗口崩溃。

这样说来,您确定domain_b.com具有有效的ssl证书吗? 您是否在浏览器会话中接受了SSL证书? 您可以通过从ajax调用中手动复制URL,将其粘贴到窗口中并访问它来进行测试。 接受证书后,它将开始工作。

您可能会看到这样的图像:

在此处输入图片说明

如果是这样,请单击继续

我没有直接解决在https上调用跨域的问题,但是我确实提出了一种在我的情况下可以接受的解决方法:我没有尝试直接从客户端调用跨域,而是建立了一个Web服务,该服务位于客户端和另一个域上的服务器之间。 Web服务与客户端在同一域上,因此客户端可以毫无问题地调用此服务。 然后,Web服务使用标准的HTTP通信将请求发送到远程服务器并接受响应,然后将响应返回给客户端。 基本上,本地Web服务的作用类似于客户端和远程服务器之间的代理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM