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

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

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

我的网站通过 HTTPS 运行。

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

有什么解决办法吗?

【问题讨论】:

    标签: javascript jquery web-services cross-domain jsonp


    【解决方案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 清理。感谢您的帮助:)
    猜你喜欢
    • 2015-02-23
    • 2013-05-15
    • 2012-03-25
    • 2021-10-06
    • 2018-01-14
    • 2015-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多