如何在HTTPS连接上显示非SSL映像?

22 ssl https image

在我的https网站上,如何在没有证书的情况下显示来自网站的图像?

我拥有以下示例域:

  • http:// www .example.com
  • http:// static .example.com(用于我的CDN)

我拥有www .example.com 的证书,但不拥有静态 .example.com 的证书.

在我的www.example.com域上,您可以使用http S://www.example.com 注册SSL服务

在注册表(www..)上,我想显示来自我的CDN的图像,该图像位于http:// static .example.com上,但不拥有该子域的证书.

在https://www.example.com注册表 - 我正在使用AJAX从http://动态提取图像static.example.com.使用AJAX时,Web浏览器似乎根本不显示非SSL图像.但是,如果该图像位于http S://www.example.com域(与注册表单相同),则图像将通过AJAX显示.

出于架构和设计原因,我想将这些图像保存在我的CDN(static.example.com)上,而无需购买证书.

有谁知道我如何通过我的http S://.xample域上的非SSL子域通过AJAX显示这些图像?

提前致谢.

小智 16

你可以自己创建ssl代理.

通过此脚本运行所有图像.只需创建一个文件并将此PHP代码放入其中.使用curlfile_get_contents回显内容.

因此,如果您想要调用安全映像,请将其称为:

https://mysecureserver.com/path_to_this_script/?url=[base64 encoded image link]

<?php   
  $strFile = base64_decode(@$_GET['url']);
  $strFileExt = end(explode('.' , $strFile));
  if($strFileExt == 'jpg' or $strFileExt == 'jpeg'){
    header('Content-Type: image/jpeg');
  }elseif($strFileExt == 'png'){
    header('Content-Type: image/png');
  }elseif($strFileExt == 'gif'){
    header('Content-Type: image/gif');
  }else{
    die('not supported');
  }
  if($strFile != ''){
    $cache_ends = 60*60*24*365;
    header("Pragma: public");
    header("Cache-Control: maxage=". $cache_ends);
    header('Expires: ' . gmdate('D, d M Y H:i:s', time() + $cache_ends).' GMT');

    //... [and get the content using curl or file_get_contents and echo it out ]

  }
  exit;
?>
Run Code Online (Sandbox Code Playgroud)

  • 这很好,但请注意这里的安全问题.确保只允许获取某些域名网址...又名列入白名单的域名. (3认同)
  • 请注意,这将完全失去拥有 CDN 的意义,因为 CDN 的工作是为来自不同服务器的内容提供服务,但该解决方案无论如何都会将其放入您的服务器。因此,您的服务器会将图像提供给 CDN,然后从 CDN 取回它。因此,如果您这样做,则只需停止 CDN 并从您的服务器提供静态内容,就不会产生 PHP 开销。 (2认同)

Jak*_*čar 2

就像您要包含 https 图像一样:

<img src="http://www.google.com/intl/en_ALL/images/logo.gif" />
Run Code Online (Sandbox Code Playgroud)

不过,某些浏览器可能会向用户抱怨您正在为安全页面加载不安全的资源。你对此无能为力。

  • “这就是整个问题”,呵呵……直到你彻底改了。 (3认同)