是否可以从 HTTPS 向 HTTP 发出 JSONP 请求?

Posted

技术标签:

【中文标题】是否可以从 HTTPS 向 HTTP 发出 JSONP 请求?【英文标题】:Is it possible to make a JSONP request from HTTPS to HTTP? 【发布时间】:2012-08-26 01:42:18 【问题描述】:

我知道有一个几乎重复的问题,但答案根本不令人满意。

我需要使用通过 HTTP 运行的 Openstreetmap 服务进行地理编码。

我的网站通过 HTTPS 运行。

似乎无法从 https 到 http 进行 JSONP 请求,浏览器(Chrome)抱怨内容不安全。

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

浏览器抱怨内容不安全的原因是内容不安全。安全页面的全部目的是所有内容都是安全的,并且可以信任。

您可以在请求不安全内容的安全站点中设置代理页面。在那里,您应该在将内容发送到浏览器之前对其进行验证,以便它实际上是安全的,而不仅仅是假装是安全的。

【讨论】:

所以,在实际场景中,我的 JQuery 应该在 http 中打开一个弹出窗口(我能想到的唯一解决方案),获取 JSONP 响应并解析它? 在真实场景中,您不应在安全页面上通过未加密的渠道加载内容。如果您对安全性不认真,请首先使用 HTTP。 @Cranio:不,我所说的代理是服务器上的一个页面。你向它发出 https 请求,它向服务发出 http 请求,验证响应,并将其返回给浏览器。 @Tgr:不是我的错,我必须在我的网站上使用 https,并且我必须在 FTP 上使用外部服务。 @Guffa:我想出了一个方法,作为自己的答案添加。欢迎评论【参考方案2】:

如果您想向在 HTTP 下运行的外部服务发出 POST 请求,而初始请求来自 HTTPS,则始终会被视为不安全。 据我所知,没有办法解决。

您可以做的是向后端发送另一个 POST 请求到在 HTTP 下运行的服务。从那里返回 HTTP 服务返回的值。

【讨论】:

你应该只是从服务返回值,你应该先验证它。代理正在获取不安全的数据并返回安全数据,因此它必须负责检查它是否确实是安全的。 最后你可能想要返回数据,如果它是安全的。否则,首先执行请求是没有用的。 我说你应该先验证它。你认为接下来会发生什么? ;)【参考方案3】:

对于可能关心的人,这是我自己整理出来的。

1) 我的 javascript 代码使用我需要转发到服务的参数调用我服务器上的 AJAX 页面

2) AJAX 页面使用地址通过 CURL 发出请求

3) 我清理响应并将其转换为 JSON

4) 使用 Javascript 的成功回调我使用数据

【讨论】:

是的,看起来不错。代理页面不必原封不动地返回响应。 @Guffa:是的,它是一对坐标,很容易通过 php 清理。感谢您的帮助:)

以上是关于是否可以从 HTTPS 向 HTTP 发出 JSONP 请求?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以从Google文档内部发送HTTP请求?

是否可以从另一个网络向服务器发出请求

向 wcf 服务发出 https 请求:根据验证程序,远程证书无效

HTTPS 和 HTTP CORS

从openresty lua发出https tls请求

如何向外部 Rest Api 发出 Http Post 请求? [关闭]