【发布时间】:2015-03-07 15:21:42
【问题描述】:
我有一个使用 SSL 的站点,它使用 jquery ajax 从标准 http 站点加载数据。我控制了这两个网站并设置了跨域策略。
这曾经可以正常工作,但突然无缘无故停止了。
我的 SSL 站点使用以下方式加载数据:
$('#targetDiv').load('http://www.example.com .stuff');
它在 http 下有效,但在 https 下无效。在 Chrome 中,我收到以下错误:
Mixed Content: The page at 'https://www.secure-site-example.com' was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint 'http://www.example.com/'. This request has been blocked; the content must be served over HTTPS.
现在我知道它抱怨我在安全站点的 load() 中使用 http。我不明白的是它突然停止工作的方式。
Chrome 和/或其他浏览器最近是否更新了其安全性? 如果是这样,有没有办法解决这个问题,而无需为 www.example.com 购买 SSL 证书?
谢谢。
【问题讨论】:
-
从错误中可以看出,由于域的协议不同,您被 SOP 阻止。如果您在域上设置了 CORS,则需要手动添加标头。为此,请使用
$.ajax而不是load()并设置相关标题。 -
感谢您的回复。当您说,设置相关标题时,您是什么意思?这是刚刚推出的新事物吗?
-
不,Same Origin Policy 已经存在很长时间了。我假设您已经为 CORS 设置了域,正如您所说的
both sites have setup a cross domain policy -
是的。所以问题是我使用的是.load 而不是.ajax。我仍然不明白为什么它突然停止工作。
-
因为您将接收域从
http更改为https。如果两个站点上的协议相同,则可以正常工作。
标签: jquery ajax ssl cross-domain