【问题标题】:How to use jQuery GET on HTTP (non-secure) server?如何在 HTTP(非安全)服务器上使用 jQuery GET?
【发布时间】:2016-06-14 10:45:00
【问题描述】:

当我尝试在非安全站点(即 http,而不是 https)上使用 $.get 时遇到此错误:

jquery.min.js:4 混合内容:“...”处的页面是通过 HTTPS 加载的,但请求了不安全的脚本“http://api.openweathermap.org/data/2.5/weather?lat=50&lon=2?callback=jQuery...”。此请求已被阻止;内容必须通过 HTTPS 提供。

我一直在想办法解决这个问题。这个问题是固定的,因为服务器由 OpenWeather.org 托管,并且它是一个不安全的站点(即 http,而不是 https)。

这是我的请求代码: $.get("https://api.openweathermap.org/data/2.5/weather?lat=" + latitude + "&lon=" + longitude + "&APPID=123456", function(data) { tempC = data.weather.main.temp / 10; // OpenWeather API returns Celsius * 10 rain = data.rain["3h"]; clouds = data.clouds.all; });

当然,只需将请求 URL 更改为 https://api.openweathermap.org... 是行不通的。试过了,没用。

我现在能想到的唯一解决方案是找到另一个可免费用于我的项目的天气 API,但我想知道是否有办法仍然使用 OpenWeathermap 的 API,因为它是 http。很想知道这一点,因为仅仅因为它是 http 而不是 https 就不得不放弃某些 API 似乎很浪费。

【问题讨论】:

  • 您能出示您的请求代码吗?
  • 顺便说一句,您是说您通过 HTTP 调用请求,但错误消息清楚地表明该请求是通过 HTTPS 发送的
  • 哦,是的,忘记包含我的请求代码。我已经用代码编辑了原始帖子。 @JohnnyAW 是的,但是错误消息是指我测试代码的 JSFiddle。 HTTPS 指的是 JSFiddle 网站。
  • 但是您在代码中将请求发送到“HTTPS”??!!
  • 等等,我想我明白你的问题了,你通过“https”提供你的网站,想向“http”-APi发送请求,浏览器响应“混合内容”,对吧?

标签: javascript http get


【解决方案1】:

在 SO 上找到另一篇关于相同“混合内容”问题的帖子。它很有帮助,并指出了解决问题的许多其他资源。

提问者最终放弃了 openweathermap API(因为它通过 HTTP 提供服务)并改用了 forecast.io 的 API(通过 HTTPS 提供服务,但仍然免费)。

Using Open Weather Map which is HTTP only through an HTTPS website and NOT get mixed content warning

【讨论】:

    【解决方案2】:

    所以,问题在于,您在 HTTPS 站点(JSFiddle 和 Coodepen)上运行代码。出于安全原因,您的浏览器将不允许 HTTPS 站点上的 HTTP 连接。您可以通过在运行代码的页面上强制使用 HTTP(尝试从本地文件或 localhost 运行代码)来解决该问题,或者您可以在服务器上创建 HTTPS -> HTTP 转发,这将接收 HTTPS 请求从您的代码中向 API 发送 HTTP 请求。

    我建议首先尝试从 localhost 或本地文件运行(不确定是否每个浏览器都允许从本地文件进行 AJAX,但您可以在设置 localhost 之前尝试),这应该适合您。如果您只是想测试 API,您可以简单地将 GET 请求的 URL 复制到浏览器选项卡中并执行它。

    【讨论】:

    • 感谢您的回答。所以你是说我的代码在 HTTPS 安全服务器上运行,而我的浏览器可以识别并拒绝从不安全的 HTTP 服务器获取数据?我懂了。这就说得通了。至于测试 URL,我已经成功地做到了。 HTTP API URL 在直接粘贴到我的浏览器时有效。正如预期的那样,我得到了一个带有相关数据的 JSON 对象。
    • 这是否意味着如果我的代码在 HTTP 服务器上运行,并且它从 HTTP 服务器运行$.get(通过 API 调用),它应该能够毫无问题地这样做?跨度>
    • @nickang,是的,您可以通过 HTTP 设置 localhost 并毫无问题地运行您的代码
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 2011-12-27
    • 2021-09-01
    相关资源
    最近更新 更多