web-dev-qa-db-ja.com

HTTPS接続で非SSLイメージを表示する方法

Https Webサイトで、証明書のないWebサイトの画像を表示するにはどうすればよいですか?

私は次のサンプルドメインを所有しています。

  • http:// www。example.com
  • http:// static。example.com(私のCDNに使用)

www。example.comの証明書を所有していますが、static。example.comの証明書は所有していません。

Www.example.comドメインでは、http [〜#〜] s [〜#〜]://www.example.comを使用してSSL経由でサービスに登録できます

登録フォーム(www。)で、http:// static。example.comにあるCDNの画像を表示したいが、そのサブドメインの証明書を所有していません。

Https://www.example.com登録フォーム-AJAXを使用してhttp://static.example.comから画像を動的にプルします。 AJAXを使用している場合、ブラウザは非SSL画像をまったく表示しません。ただし、ifその画像がhttp [〜#〜 ] s [〜#〜]://www.example.comドメイン(登録フォームと同じ)、画像はAJAX経由で表示されます。

アーキテクチャと設計上の理由から、証明書を購入することなく、これらのイメージを私のCDN(static.example.com)に保持したいと考えています。

AJAX私の非SSLサブドメインから私のhttp [〜#〜] s [〜#〜]://を介してこれらの画像を表示する方法を誰かが知っていますか? www.exampleドメイン?

前もって感謝します。

23
HankHany987

独自のSSLプロキシを作成できます。

このスクリプトですべての画像を実行します。ファイルを作成して、このPHPコードを内部に配置します。curlまたはfile_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;
?>
16
Alireza Balouch

Https画像を含めるのと同じように:

<img src="http://www.google.com/intl/en_ALL/images/logo.gif" />

ただし、一部のブラウザは、安全なページのために安全でないリソースをロードしているとユーザーに不満を言うかもしれません。それについてあなたができることは何もない。

3
Jaka Jančar

一部のブラウザー(特にInternet Explorer)でセキュリティー警告またはプロンプトをトリガーしないstatic.example.comの証明書がないと、これを行う方法はありません。

GoDaddyはSSL証明書を30ドルで販売しています。春は少しの現金でいいと思います。

3
ceejayoz

https://参照を使用して、HTTPS経由で提供されるページにリンクするか、直接またはAJAX経由で埋め込むすべてのコンテンツを提供する必要があります。

サードパーティのプレーンHTTPコンテンツの問題を回避する1つの方法は、HTTPSを使用するリバースプロキシを介してコンテンツを提供することです。コンテンツの単なるプロキシ化または複製と見なされるかどうかによって(おそらくGoogleのキャッシュと同様)、そうすることには法的な意味合いがあるかもしれません。さらに、そうすることで、この方法で埋め込んだコンテンツを効果的に保証できます。

2
Bruno

これは本当に古い質問ですが、とにかく$ .02を投入すると思いました。

http://static.example.com のサブドメインは http://www.example.com のサブディレクトリ/フォルダーでもあると想定しています(IE http://www.example.com/static )最近のほとんどのホスティングと同様です。

これを検証できますが、 http://www.example.com/statichttps://www.example.com/static を参照すると、同じように見えますか? http://static.example.com にアクセスした場合と同じようにページを表示します

それが本当なら、あなたはこのように画像を供給することができます...

https://www.example.com/static/image.ext

一般的なシュレッドホスティングを利用する他の可能性の1つは、多くのホスティングプロバイダーが提供する共有証明書を使用することです。ホスティング会社のサポートに確認してください。彼らは通常このようなものです...

https://Host.hostcoserver.com/~user/dir/image.ext

これがお役に立てば幸いです。

1
ASU Service

@ JakaJančarの答え を拡張するには、AJAX経由で画像をダウンロードする必要がありますか? AJAX呼び出しをこれで置き換えることができます:IMG要素を動的に追加します。

function load_image_instead_of_ajax_call(dom_parent_element,image_url) {
    var img = document.createElement('img');
    img.onload = your_success_callback_function;
    img.onerror = your_error_callback_function;
    img.src = image_url;
    dom_parent_element.appendChild(img);
}

この方法で、画像リソースが読み込まれ、成功/エラー時に適切なコールバックが行われます。

一部のブラウザーは、ページにhttpとhttpsの両方のコンテンツが含まれていると文句を言うかもしれませんが、あまり一般的ではありません(これはほとんどのブラウザーでデフォルトでオフになっているようです)。