Ajax在http页面上使用https

我的网站使用http和https协议; 它不会影响内容。 我的网站使用jQuery ajax调用,也填充页面上的一些区域。

现在,我想通过https做所有的ajax调用。 (请不要问我为什么:))当我在与https协议的页面上,Ajax请求正在工作。 当我在与http协议的页面上,我得到一个JavaScript错误:访问受限制的URI被拒绝

我知道这是一个跨域问题(实际上,这是一个交叉协议问题),我知道我应该在当前页面上使用与Ajax调用相同的协议。

不过,我希望所有的ajax调用都是https,并在通过http提供的页面上调用它们。 有没有什么解决方法来实现这个(一些JSON /代理解决scheme?),或者是不可能的?

从服务器添加Access-Control-Allow-Origin标头

Access-Control-Allow-Origin: https://www.mysite.com 

http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing

试试JSONP。

大多数JS库使其与其他AJAX调用一样简单,但在内部使用iframe来执行查询。

如果您没有使用JSON来处理您的有效内容,那么您必须围绕iframe推出自己的机制。

亲自,我只是redirectforms的http://页面的https://一个

查看开源Forge项目。 它提供了一个JavaScript TLS实现,以及一些Flash来处理实际的跨域请求:

http://github.com/digitalbazaar/forge/blob/master/README

简而言之,Forge将使您能够从通过http加载到https站点的网页制作XmlHttpRequest。 您将需要通过您的服务器提供一个Flash跨域策略文件来启用跨域请求。 查阅自述文件末尾的博客文章,以获得更为深入的解释。

但是,我应该提到Forge更适合两个不同的https域之间的请求。 原因是有潜在的MiTM攻击。 如果您从非安全网站加载JavaScript和Flash,可能会受到影响。 最安全的用途是从一个安全的网站加载它,然后用它来访问其他网站(安全或其他)。

你可以尝试在一个iframe中加载https页面,并通过某个网桥将所有ajax请求发送到/离开帧,这是一个窍门,但它可能工作(不确定是否会给予安全上下文相同的访问限制) 。 否则,本地http代理重新路由请求(如任何跨域调用)将是可接受的解决scheme。

这就是我所做的:

用您想要发布的数据生成一个隐藏的iFrame。 由于您仍然控制该iFrame,所以相同的原点不适用。 然后在该iFrame中提交表单到ssl页面。 然后,ssl页面将redirect到一个非ssl页面,并显示状态消息。 您可以访问iFrame。