【问题标题】:Embed iFrame to HTTPS from HTTP and embed only certain parts?将 iFrame 从 HTTP 嵌入到 HTTPS 并仅嵌入某些部分?
【发布时间】:2018-09-01 03:27:32
【问题描述】:

我想通过 iFrame 嵌入网站。但是我有两个问题:

  1. 我有一个 HTTPS 网站,并希望从 HTTP 网站嵌入一些内容。那么,如何确保连接安全? - 因为如果我通过 HTTPS 加载我的网站,否则我的 HTTPS 网站不会显示 iFrame。通过 HTTP 它可以工作。但我想要一个安全的连接!

  2. 我只想嵌入网站的某些部分,而不是整个网站。甚至容易得多。我只想从桌子开始嵌入网站,直到网站结束。所以,我只想把网站的负责人剪掉一点。但这是我的问题: 我必须把它删掉,不要使用 CSS 并说display:none;,因为我想做一个完美的 SEO 网站,我不想嵌入不重要的东西!

这是我要嵌入的网站,我想在<iframe> 标签之后嵌入所有内容:

<body bgcolor="#ECECEC" leftmargin="0" topmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" link="#CC0000" vlink="#666666" alink="#000000" )="" <center="">
    <iframe id="a8febc47" name="a8febc47" ...</iframe>
   ...
   ...
   ...
   ...
</body>

会为获得帮助而感到自豪!

【问题讨论】:

  • 你能在这里使用 PHP 吗?
  • 如果页面不需要安全连接,您可以使用 .htaccess 对显示非安全 iframe 的非安全页面执行 301 重定向。无论如何,拥有一个不安全的 iframe 都会破坏页面安全的目的,特别是如果框架中的页面不是您自己的。另一方面,如果该页面确实属于您,您也可以保护它。
  • 您还可以使用服务器端语言来获取页面,缓存本地副本并使用您自己的域和 https 在本地显示它。正如 Luca Kiebel 所问,你可以使用 PHP 吗? (或者可能是另一种服务器端语言?)
  • 我可以使用 PHP,是的!

标签: javascript html css http iframe


【解决方案1】:

首先,您不能通过 HTTP 从安全连接加载任何内容,每个浏览器应该并且会阻止对该内容的请求。否则,中间人可能会在您不知道的情况下用任何内容替换请求的数据,并可能执行恶意代码。

关于仅通过 iFrame 显示网站的一部分,iFrame 就像您在另一个窗口中打开网站并根据您的需要调整其大小一样。

仅获取网站一部分的唯一方法是让您的网络服务器提供一个文件,该文件是您要放入 iFrame 中的内容的克隆,这意味着您使用服务器来剪切您不需要的部分'不想离开, 或者您可以使用 jQuery 函数 .load 仅获取目标的一部分:

var url = "https://example.com"; // any domain, as long as it uses HTTPS when you use it
var fragment= "div > p"; // any valid CSS-Selector

$("#target-div").load(url + " " + fragment);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Data from https://example.com. Not working due to CORS....</p>
<div id="target-div"></div>

如您所见,这是行不通的,在这种情况下,它是 CORS 标头,但您希望从中获取数据的站点可能将 Access-Control-Allow-Origin 标头设置为 *...

您可以使用 PHP,您可以使用 DOMDocument 类来解析和操作其他网站的 HTML:

<?php

# Use the Curl extension to query your website and get back the full page
$url = "http://your-other-domain.com";
$tag = "table";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$html = curl_exec($ch);
curl_close($ch);

# Create a DOM parser object
$dom = new DOMDocument();

# Parse the HTML
# The @ before the method call suppresses any warnings that
# loadHTML might throw because of invalid HTML in the page.
@$dom->loadHTML($html);

# Iterate over all the <$tag> tags
foreach($dom->getElementsByTagName($tag) as $table) {
        echo $table;
}

您可以修改它以将$url$tag 作为 GET 参数并使其更具响应性。现在这样做是回显页面上的所有表格,如果您只有一个,这应该可以完成工作。

【讨论】:

猜你喜欢
  • 2017-09-06
  • 2019-11-28
  • 2013-10-26
  • 2011-06-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-17
  • 2018-04-11
  • 1970-01-01
相关资源
最近更新 更多