【问题标题】:Embedding HTTP content into HTTPS site将 HTTP 内容嵌入 HTTPS 站点
【发布时间】:2013-10-26 01:14:14
【问题描述】:

我们有一个统一的门户,它通过一个基于 jQuery 选项卡的界面链接多个服务,该界面利用 iframe 显示来自不同服务的内容。我们的门户在使用 HTTPS/SSL 的安全服务器上运行。虽然我们的大多数外部服务都是 HTTPS,但其中两个不是。显然,我们意识到混合内容的问题,我们不喜欢在门户中拥有非 https 站点的想法,但我们别无选择。一切都还好,直到几天前谷歌将 chrome 更新到 30 版时,它现在默默地阻止了混合内容。这给我们带来了很多问题。我们联系了外部服务并询问他们是否可以将其服务升级到 HTTPS,其中一个回复说他们在未来 2 年内没有这样做的计划。

显然这是个问题。我们尝试通过让该服务在新的浏览器窗口中打开来解决该问题,但这是一个相当不雅的解决方法,如果可能的话,我想摆脱它。有什么方法可以让我使用 AJAX 或 PHP 来预取相关页面,然后在门户 iframe 中显示它而不用 Chrome 阻止它?

如果有任何建议,我将不胜感激。我确实理解将安全内容与非安全内容混合在一起是多么糟糕的想法,但我在这件事上别无选择,因为我的经理坚持认为该服务必须是门户的一部分。

提前致谢。

问候

亚历克斯

【问题讨论】:

  • 这个问题只发生在 JS over http,我想。如果可以将您嵌入的内容剥离为仅 html/css/images,Chrome 似乎仍然可以正常显示它们。
  • @Blazemonger 使用 Apache 的 mod_proxy 更直接,可以像 .htaccess 文件中的一行一样简单。 :) 它的开销也比在 PHP 中做同样的事情要少得多。
  • 我收回我之前的评论。 iframe 是问题所在,即使您只是请求一个没有 html/javscript 的纯文本页面。
  • 我同意...问题不在于获取非 HTTPS 页面,而是试图在嵌入 HTTPS 页面的 iframe 中显示它。

标签: php jquery google-chrome iframe https


【解决方案1】:

一个稍微简单的解决方案是使用反向代理。您可以很容易地配置 Apache 以获取 HTTPS 连接,从另一个 URL 获取请求的内容并返回它。见mod_proxy。问题是浏览器必然会看到不同的 URL/域(您的反向代理),这可能会也可能不会导致 cookie 或硬编码链接出现问题。

【讨论】:

  • 您能否提供一个如何在 nginx 中进行设置的示例?我有一个类似的问题,很想尝试一下这个解决方案,但在我的生活中从来没有代理过任何事情。
  • 不,我不是很了解nginx,我能做的就是为你阅读手册。你可以自己做。 ;)
  • @deceze 反向代理在一定程度上可以工作 - 但它似乎确实有点搞砸了样式。
  • @Alex 是的,正如我所说,魔鬼可能在细节中。如果它只是一些硬编码的链接,您可以在您的代理上处理结果以替换这些链接也被代理。 IIRC mod_proxy 实际上可能能够在某种程度上做到这一点。
  • @deceze 干杯伙伴。我注意到代理页面正在尝试使用相对路径链接到样式表和 js 脚本。所以我只是将脚本下载到我的本地服务器并再次尝试......虽然我取得了一定程度的成功,但它仍然无法正常工作。 :/但这是我最接近解决问题的方法。所以我要投票并接受答案。再次干杯。
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2015-03-22
  • 2015-12-12
  • 1970-01-01
  • 2014-01-19
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
相关资源
最近更新 更多