我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?

Posted

技术标签:

【中文标题】我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?【英文标题】:Can we access WCF service over https using Jquery $.ajax() call in cross domain? 【发布时间】:2012-01-28 22:39:23 【问题描述】:

我已经为这两个应用程序添加了 SSL。

假设https:// www.a.comhttps:// www.b.comhttps:// www.a.com 正在通过$.ajax() 调用从https:// www.b.com 访问wcf 服务。 我也在使用 jsonp 来实现这个功能。当这些应用程序不是 https 时,它可以正常工作。但是当我 https 调用 $.ajax() 时会失败。它在此$.ajax() 调用中的firebug 中给出“内部服务器错误”

我们可以在安全模式下做这样的事情吗?

【问题讨论】:

您在服务器端看到的异常是什么? 【参考方案1】:

听起来,通过加密 (https) 连接读取/写入 JSON 数据会好得多。让 WCF 在端点处处理您想要的任何内容,但使用简单的 JSON 消息进行通信。恕我直言...

【讨论】:

【参考方案2】:

我们可以在跨域中使用 jquery ajax 调用通过 https 访问 WCF 服务,但是当此类调用被引发时我们会收到安全警报。

根据Same-origin policy,如果它是相同的域和相同的协议,我们可以访问。

详情请见Same-origin policy

【讨论】:

尝试将CORS添加到主机服务器,然后你应该让它工作 大多数现代浏览器都支持CORS(跨源资源共享),因此您可以肯定地尝试一下。简单来说,您的服务器必须在respose header Access-Control-Allow-Origin中重新运行:https://www.a.com 了解更多请访问en.wikipedia.org/wiki/Cross-origin_resource_sharing【参考方案3】:

建议一:

使用CORS(Cross Orignin resource sharing)

预检请求期间

您应该看到以下两个标题:

访问控制请求方法

访问控制请求标头

这些请求标头正在向服务器请求发出实际请求的权限。

您的预检响应需要确认这些标头,以便实际请求工作

例如,假设浏览器发出带有以下标头的请求:

来源:http://yourdomain.com

访问控制请求方法:POST

访问控制请求标头:X-自定义标头

然后,您的服务器应使用以下标头进行响应:

访问控制允许来源:http://yourdomain.com

访问控制允许方法:GET、POST

访问控制允许标头: X-Custom-Header

Reference

建议二:

使用JSON-P 和中间页面:

创建一个中间页面,向 https 页面发出 http 请求并返回 JSON-P 结果 如果中间页面在同域中,则直接使用它,否则跨域ajax请求并使用JSON-P

Reference

【讨论】:

【参考方案4】:

就 jsonp 请求而言,https 与 http 应该没有什么特别之处。内部服务器错误通常表明 Web 服务器引发了异常。什么是状态码(500)?

如果是 500,我会看看您是否可以使用 chrome 的调试器或 firebug 识别请求中的任何差异。

【讨论】:

【参考方案5】:

我只是在主机服务器上创建一个接受来自客户端的请求的服务。然后,该服务将发出跨域请求并将数据发送回客户端。这样您就不必更改任何配置。

【讨论】:

以上是关于我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在跨域中获取 iframe contentWindow 高度

解决jquery ajax在跨域访问post请求的时候,ie9以下无效(包括ie9)的问题

在跨域请求中捕获 JSONP 错误

无法在跨域上使用 JSONP 发布数据

jQuery跨域文件上传

跨域 jQuery Ajax 请求和 WCF REST 服务