3

我有一个网站正在运行https。我必须从没有 https 而是单一http协议的外部服务器(外部域)加载图像。

http有没有办法通过 PHP 或 Node处理图像代理?所以我可以像这样渲染图像:

<img src="https://domain.com/proxy?url=http://externaldomain.com/image.jpg" />

这个想法是避免将图像保存在本地,而只显示它们。

当我尝试在域内呈现http提供的图像时https,我收到以下控制台消息:

https://domain.com/上的页面显示来自http://externaldomain.com/image.jpg的不安全内容。

同样,地址栏中的 SSL (/https) 锁定图标变为灰色。

4

3 回答 3

6

您可以使用节点,它只会将图像通过管道传输,而不是将整个图像加载到内存中,然后再发送到客户端(就像file_get_contents在 php 中所做的那样)。在此示例中使用 request 以简化流式传输

var https = require('https');
var url = require('url');
var request = require('request');

var server = https.createServer(function (req, res) {
  var queryData = url.parse(req.url, true).query;

  if (queryData.url) {
    var x = request(queryData.url);
    req.pipe(x).pipe(res);
  } else {
    res.writeHead(400, {"Content-Type": "text/plain"});
    res.end("No url");
  }
});

// Listen on port 443
server.listen(443);
于 2013-06-15T05:13:06.800 回答
1

像这样的东西应该工作:

<?php
    header('Content-type: image/jpeg;');
    $p = "http://i.imgur.com/jB3xD75.jpg";
    $a = file_get_contents($p);
    echo $a;
?>
于 2013-06-13T12:12:34.653 回答
0

您应该首先使用 php cURL 库下载它们。如果您不想将图像存储在硬盘上。您可以将它们作为数据 URI 添加到 src 属性中。

于 2013-06-13T11:11:14.127 回答