【问题标题】:Jquery ajax load stopped working from a https siteJquery ajax 负载停止从 https 站点工作
【发布时间】: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


【解决方案1】:

回答我自己的问题。这看起来是浏览器特定的安全问题。怀疑 Chrome 在过去几个月中更新了它的安全设置,这就是问题发生的原因。

如果您确认希望排除被阻止的内容,则上述 ajax 在 Firefox 中有效。

我需要找到一种方法来绕过多个协议的 ajax 加载。哦,好吧,我想给我一些事做:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多