我们可以在跨域中使用 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.com
和https:// www.b.com
。
https:// 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-PReference
【讨论】:
【参考方案4】:就 jsonp 请求而言,https 与 http 应该没有什么特别之处。内部服务器错误通常表明 Web 服务器引发了异常。什么是状态码(500)?
如果是 500,我会看看您是否可以使用 chrome 的调试器或 firebug 识别请求中的任何差异。
【讨论】:
【参考方案5】:我只是在主机服务器上创建一个接受来自客户端的请求的服务。然后,该服务将发出跨域请求并将数据发送回客户端。这样您就不必更改任何配置。
【讨论】:
以上是关于我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在跨域中获取 iframe contentWindow 高度