使外部HTTP流量显示为HTTPS

时间:2014-11-06 21:50:51

标签: asp.net asp.net-mvc iis https

我有一个网站“https:// mysite.com”,它将客户个人网站“http:// example.com”上的弹出窗体通过iframe加载到后台。

我正在寻找通过https加载外部客户网站的方法。

例如:“https:// mysite.com/example.com”会通过https在我的网站上加载example.com,因此不会有任何“混合内容”警告。

我正在运行IIS和asp.net应用程序。

谢谢!

3 个答案:

答案 0 :(得分:0)

您可以编写一些服务器端代码来读取目标页面,然后将该HTML注入您的页面。 C#代码:

public string GetWebpageHtml(string url)
{
  System.Net.WebClient wc = new System.Net.WebClient();
  return wc.DownloadString(url);
}

public ActionResult ServeImage(string imageUrl, string mimeType = "image/jpg")
{
  System.Net.WebClient wc = new System.Net.WebClient();
  var bytes = wc.DownloadData(imageUrl);
  return File(bytes, mimeType);
}

在您的示例中,您可以在http:// example.com上调用该功能,并将该HTML放在您的页面中。

我还创建了一个处理程序操作,该操作应该下载远程文件并将其作为本地操作提供。请记住,在下载之前,您还必须将相对路径转换为完整路径。

答案 1 :(得分:0)

为此,您必须通过HTTPS(在您的服务器或其他服务器上)代理请求。如果页面上没有图像/ javascript等,那就像@dave建议的那样简单。如果有,那么你必须做更多的工作来处理所有相关链接。如果有必须处理的POST,则会变得更加复杂。根据复杂程度,您可以自己编写代码,或者也可以找到一些现成的产品。

答案 2 :(得分:0)

通过更改网站的背景,而不是让您看起来像是在您的客户的网站上,不会更容易在客户端上实际加载iframe弹出窗口现场?写一段js应该相对简单:

<script type="text/javascript">
    var node = document.createElement('iframe');
    node.src = 'http://www.google.com';
    node.style = 'position: fixed; width: 80%; height: 80%; margin: auto;'
    document.body.appendChild(node)
</script>

让您的客户在适当的时候粘贴。当然,肯定会出现这样的情况,但是你的问题中没有任何内容可以指明这一点。

如果您的客户想要使用您的表单,他们可能必须链接到它或对其网站或广告进行一些更改。为什么不让他们添加这个脚本呢?如果您的客户的网站或您的网站仅在LAN上可用,那么他们为什么要首先相互链接?因此,我能想到的大部分理由都是因为没有按照正常的网络方式进行第三方弹出窗口,这似乎不适用于此处,至少是问题中的信息。