2014-10-31 63 views
0

我的Webapp正在使用https連接/ ssl證書運行。我需要向用戶展示圖片。我通過API請求獲取圖片的鏈接,然後將它們鏈接起來。可悲的是,圖片地址是http,所以瀏覽器顯示網站上存在不安全的部分,這不能是...在https連接中加載的Http內容

我可以下載圖片並鏈接到正確的圖片,但我認爲這可能有點耗時,並不是處理這個問題的最好方法。

有人知道更好的解決方案嗎?我使用PHP,jQuery和JavaScript。

+0

您的問題中沒有足夠的信息來給出答案。哪個API?你不能把'http://'改成'https://',爲什麼不呢?圖像是否在外部資源上? – 2014-10-31 19:37:08

+0

亞馬遜MWS ListMatchingProducts – baao 2014-10-31 19:38:27

+0

如果我將http://更改爲https://它根本不顯示任何圖片。這些圖像存儲在亞馬遜的服務器上 – baao 2014-10-31 19:41:20

回答

1

您必須在服務器上編寫代理並通過它顯示所有圖像。基本上,你的網址應該是這樣:

$url = 'http://ecx.images-amazon.com/images/I/51MU5VilKpL._SL75_.jpg'; 
$url = urlencode($url); 

echo '<img src="/proxy.php?from=' . $url . '">'; 

和proxy.php:

$cache = '/path/to/cache'; 
$url = $_GET['from']; 

$hash = md5($url); 
$file = $cache . DIRECTORY_SEPARATOR . $hash; 
if (!file_exists($file)) { 
    $data = file_get_contents($url); 
    file_put_contents($file, $data); 
} 

header('Content-Type: image/jpeg'); 

readfile($file); 
+0

這樣做時,它可以用來做腳本注射Becareful。沒有驗證圖像的來源,因此可能用它來代理互聯網上的任何東西。 – iWantSimpleLife 2015-07-14 01:13:37

1

好吧,我要告訴你一個例子流。當然,您需要適應您的需求。

假設您使用此內容命名mws.php您的服務器上的PHP文件:

if (isset($_GET['image'])) 
{ 
    header('Content-type: image/jpeg'); 
    header('Content-transfer-encoding: binary'); 
    echo file_get_contents($_GET['image']); 
} 

查找網絡上的任何圖像,例如:

http://freebigpictures.com/wp-content/uploads/2009/09/mountain-stream.jpg 

現在你可以顯示圖片,就好像它位於你自己的安全服務器上一樣:

https://<your server>/mws.php?image=http://freebigpictures.com/wp-content/uploads/2009/09/mountain-stream.jpg 

I如果你不止一次需要它,當然會更好地在本地存儲圖像,並且你必須包含正確的代碼才能從亞馬遜MWS ListMatchingProducts中獲取它,但這是基本思想。

請不要忘記確保腳本不被濫用。