【问题标题】:Jquery load https urljQuery 加载 https 网址
【发布时间】:2015-08-20 05:34:04
【问题描述】:

我有这个问题。在外部网站我有一个这样的脚本:

<div id="idtest"></div>
<script src="//example.com/widget.js" type="text/javascript"></script>

example.com 位于 https 中(同时允许 http 和 https)。在脚本 widget.js 的服务器中,我有:

 $('#idtest').load("https://example.com/index.html")

我收到此错误:混合内容:“thepage”处的页面是通过 HTTPS 加载的,但请求了不安全的 XMLHttpRequest 端点“http://example.com/index.html”。此请求已被阻止;内容必须通过 HTTPS 提供。

我不明白:为什么会出现错误以及为什么端点在“http”中? 谢谢

编辑

更多信息:

如果在 widget.js 中我这样做:

 $('#idtest').load("./index.html")

如果我在我的站点中加载脚本,内容已加载并且一切正常。

如果我这样做:

 x = "https://example.com"
 $('#idtest').load(x + "/index.html")

 $('#idtest').load("https://example.com/index.html")

我收到错误消息(如果我将脚本放在我的站点或外部站点中)。为什么?

编辑 2

更多信息:

我的网站在 django 中

编辑 3

在 Firefox 中,我以 https 和 http 加载页面。它在 Chrome 中不起作用。我在调用 url 时在 Firefox 网络分析器中看到了这种情况:

302https://example.com/index.html 200http://example.com/index.html[混合内容]

这种情况怎么理解(https转http)?可能是 Django 重定向问题?

【问题讨论】:

  • 对不起,不起作用
  • 您是否检查过所请求的整个页面是否使用了https?你确定 index.html 上没有任何东西链接到不安全的东西吗?
  • 是的,我确定在 idex.html 中没有 http 链接

标签: javascript jquery http https


【解决方案1】:

mixed content error 发生在以下情况:

  • 您尝试在不安全 (http) 提供的页面上加载安全内容 SSL(https)

或者相反

  • 您尝试在安全 SSL(https) 提供的页面上加载不安全的内容 (http)

您的错误消息是警告您的调用页面已在不安全模式下加载

您没有明确解释这一点,但您的错误表明您的网页是在没有 SSL 的情况下提供的。当您尝试加载受保护的资源时,这将成为受保护资源和不安全的混合模式问题。


如果可能,您尝试以相同方式提供参考文件

  • 正如您已解决的那样,请求不带协议的部分页面。现在,您加载的文件将使用您的页面使用的协议进行加载。

关于您的特定资源:

我尝试加载:

http://example.com/index.html

https://example.com/index.html

结果是一样的。我得到了一个带有消息的简单页面:


示例域

此域的建立是为了用于文档中的说明性示例。您可以在示例中使用此域,无需事先协调或请求许可。

More information...

【讨论】:

  • 问题是我尝试在 URL 中放置 HTTPS(或 http,如果外部站点需要它),但 $.load() 仍然使用 http。可能是 django 重定向问题?
  • @RoverDar,httprequest 将使用与您加载页面相同的协议。对于页面和所有依赖项,您必须使用一种协议(httphttps)。这解释清楚了吗?
  • 这是问题所在:我使用 HTTPS 加载页面,但似乎 httprequest 不使用它(使用 http)。我放了 https :/mysite.com/exemple.com 但它不起作用
  • @RoverDar,我明白了。抱歉,我想问一下,您的网站有证书吗?
  • 是的,我有。它完美地工作。问题是当我从外部站点调用小部件并尝试加载 index.html。
【解决方案2】:

我认为这更多是跨域域的问题。

jquery的$.load函数使用ajax加载url,所以如果目标url没有实现CORS头,就不能跨域调用。

在您的示例中,服务器 example.com 必须返回一个标头

Access-Control-Allow-Origin: *

您也可以将 * 替换为要通过 AJAX 加载内容的页面的域。

一篇关于如何使用 CORS 的好博文: http://www.html5rocks.com/en/tutorials/cors/

【讨论】:

  • 这绝对是 CORS 问题。标题应该可以解决问题。
  • 如果这是一个 CORS 问题,我希望请求总是失败。但是当嵌套在 JS 文件中时请求成功。服务器会关心请求嵌套在哪里吗?服务器不只关心请求域吗?
  • @Julien Bachmann 我在我的 Django 应用程序 django cors 标头中设置,但结果是一样的...... $.load 在 http 而不是 https(混合内容)中工作
  • 根据您的编辑 3,它看起来实际上不是跨域问题,而是您尝试从 https 页面获取 http 资源的问题。看起来您的服务器在收到 HTTPS 请求时会重定向到 HTTP,这就是问题所在。您应该将您的服务器配置为支持 https 而不是重定向。
【解决方案3】:

我在 Ruby on Rails 网页上遇到了这个问题,错误是在 https 网页上使用“_url”助手而不是“_path”助手:

视图中: 错误:borrar_linea_factura_url(l)

好的:borrar_linea_factura_path(l)

如前所述:

“_url”助手生成/controller/action/params

“_path”助手生成https://controller/action/params

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-10
    • 2017-04-30
    • 1970-01-01
    • 2016-06-07
    • 2015-04-10
    • 2016-02-06
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多