我有一个网站 foo.com,它向 bar.foo.com 发出 ajax 请求。这行得通吗?
另外,如果 foo 是安全连接 https,那么 bar.foo.com 也需要是 https 吗?这两个站点可以使用不同的证书吗?
使用纯 http AJAX:您正在谈论进行跨域 XMLHttpRequest,这是浏览器不允许的。有一个W3C 提案待决 https://wiki.mozilla.org/Cross_Site_XMLHttpRequest将来以安全的方式实现这一点(部分由IE8、IIRC实现),但目前绝对不可能。
然而,有一些解决方法可以安全地做到这一点:Subspace http://www2007.org/program/paper.php?id=801(它使用 iframe 和document.domain
), the 片段识别技术 http://softwareas.com/cross-domain-communication-with-iframes(再次使用 iframe)和window.name技术 http://www.sitepen.com/blog/2008/07/22/windowname-transport/(再次强调,iframe!)。
就 SSL 而言,您可以为域和子域购买单独的证书,或者购买涵盖这两个域的单个通配符 (*.foo.com) 证书(当然,通配符证书会更昂贵)。
如果您有一个 HTTPS 页面请求来自其他域的项目,那么只要一切都是 HTTPS,一切都会很好。这意味着如果您使用 iframe 解决方法之一,则必须指定一个https://
方案 URL 中src
iframe 的属性。
最后一个效率较低的解决方法是在https://foo.com
代理请求不安全http://bar.foo.com
。 (这也解决了 XHR 跨域问题,因此您可以忽略其他解决方法。)当然,这意味着您将 XHR 请求发送到https://foo.com/someurl
,然后就击中了http://bar.foo.com/someurl
,接收响应并将其发送回浏览器,因此从性能角度来看,如果您有这种选择,最好将 bar.foo.com 的服务器端功能移至 foo.com 上。但如果您无法移动服务器脚本,那么代理就是可行的方法。
EDIT:在做了一些额外的测试并获得 iframe AJAX 解决方法(#fragmentidentifier 之一)以跨不同的 HTTPS 域工作后,我更改了最后 3 个 graf。你can使用iframe进行SSL跨域AJAX只要一切正常https
和https
方案用于 iframe 中src
。总结:
- 简短回答:不,不允许真正的跨域 XHR
- 解决方法与
iframes:更高效,需要2个SSL
证书(或通配符证书),有点
复杂的
- 使用代理的解决方法:
效率较低,可以使用 1 或 2
SSL 证书(1 个通过 http 向 bar.foo.com 发出后端请求),有点复杂
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)