我有一个网站foo.com,它向bar.foo.com发出ajax请求.这会有用吗
另外,如果foo是安全连接,https,bar.foo.com也需要是https吗?这两个站点可以使用不同的证书吗?
使用plain-http AJAX:您正在讨论跨域XMLHttpRequest,这是浏览器不允许的.有一个W3C提案有待未来以安全的方式实现(部分由IE8,IIRC实施),但目前绝对不可能.
然而,安全地做到这一点有变通方法:子空间(使用iframe和document.domain
),片段标识符技术(再次使用iframe)和window.name
技术(再次,iframes!).
就SSL而言,您可以为域和子域购买单独的证书,或者为它们两者购买单个通配符(*.foo.com)证书(当然,通配符证书将更加昂贵).
如果您有一个请求来自其他域的项目的HTTPS页面,只要一切都是HTTPS,一切都会好的.这意味着如果您使用iframe解决方法之一,则必须在iframe https://
的src
属性中指定方案URL .
最后一种效率较低的解决方法是https://foo.com
让代理请求的脚本不安全http://bar.foo.com
.(这也解决了XHR跨域问题,所以你可以忽略其他的解决方法.)当然,这意味着你要发送XHR请求https://foo.com/someurl
,然后点击http://bar.foo.com/someurl
,接收响应并将其发送回浏览器,所以在性能方面,如果你有这个选项,只需将bar.foo.com的服务器端功能移到foo.com上就会好得多.但是,如果您无法移动服务器脚本,那么代理就是可行的方法.
编辑:在做了一些额外的测试并获得iframe AJAX解决方法(#fragmentidentifier one)以在不同的HTTPS域之间工作之后,我更改了最后3个grafs.你可以做使用I帧SSL跨域AJAX只要一切都https
和https
方案在iframe中使用src
.总结:
简答:不,真正的跨域XHR是不允许的
使用iframe的解决方法:更高效,需要2个SSL证书(或通配符证书),有点复杂
使用代理的解决方法:效率较低,可以使用1或2个SSL证书(1个通过http向bar.foo.com发送后端请求),有点复杂