Question Comment afficher des images non SSL sur une connexion HTTPS?


Sur mon site Web https, comment puis-je afficher des images à partir d'un site Web sans certificat?

Je possède le domaine d'exemple de:

  • http: //www.exemple.com
  • http: //statique.example.com (utilisé pour mon CDN)

Je possède un certificat pour www.exemple.com mais pas pour statique.exemple.com.

Sur mon domaine www.exemple.com, vous pouvez vous inscrire au service via SSL en utilisant httpS: //www.exemple.com

Sur le formulaire d'inscription (www.), Je souhaite afficher des images de mon CDN qui se trouve sur http: //statique.example.com mais ne possède pas de certificat pour ce sous-domaine.

Sur le https: //Formulaire d'inscription www.example.com - J'utilise AJAX pour transférer dynamiquement l'image depuis http: //static.example.com. Il semble que le navigateur Web n’affiche aucune image non SSL lorsqu’on utilise AJAX. cependant, si cette image était située sur le httpS: //www.example.com domaine (identique au formulaire d'inscription), l'image s'affichera via AJAX.

Pour des raisons d'architecture et de conception, j'aimerais conserver ces images sur mon CDN (static.example.com) sans avoir à acheter de certificat.

Est-ce que quelqu'un sait comment je peux afficher ces images via AJAX à partir de mon sous-domaine non-SSL sur mon httpS: //www.example domain?

Merci d'avance.


22
2018-04-19 17:41


origine


Réponses:


vous pouvez créer votre propre proxy ssl.

Exécutez toutes les images via ce script. Créez simplement un fichier et mettez ce code PHP à l'intérieur. Utilisation curl ou file_get_contents faire écho au contenu.

Donc, si vous voulez appeler l'image sécurisée, vous l'appelez comme ceci:

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
2017-10-05 07:26



Tout comme vous incluriez une image https:

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

Certains navigateurs peuvent se plaindre à l'utilisateur, cependant, que vous chargez des ressources non sécurisées pour une page sécurisée. Rien que vous puissiez faire à ce sujet.


3
2018-04-19 17:45



Il n'y a aucun moyen de le faire sans un certificat pour static.example.com qui ne déclenchera pas d'avertissement de sécurité ou d'invite dans certains navigateurs (notamment Internet Explorer).

GoDaddy vend des certificats SSL à 30 $. Je dirais le printemps pour le peu d'argent.


3
2018-04-19 18:17



Vous devez diffuser tout le contenu que vous liez ou intégrez (directement ou via AJAX) sur une page servie via HTTPS en utilisant https:// les références.

L'une des façons de contourner le problème du contenu tiers, HTTP simple consiste à diffuser ce contenu via un proxy inverse utilisant HTTPS, éventuellement sur votre site ou un service correspondant. Cela pourrait avoir une implication juridique, selon qu'il est considéré comme un simple contenu de proxy ou de duplication (peut-être similaire à celui de Google). De plus, ce faisant, vous garantissez effectivement le contenu que vous intégrez de cette manière.


2
2018-04-05 20:33



Je sais que c'est une très vieille question, mais je pensais que je mettrais mes 0,02 $ de toute façon.

Je suppose que le sous-domaine de http://static.example.com est aussi un sous-répertoire / dossier de http://www.example.com (C'EST À DIRE. http://www.example.com/static) comme c'est le cas pour la plupart des hébergeurs ces jours-ci.

Vous pouvez modifier ceci mais en naviguant vers http://www.example.com/static et https://www.example.com/static ... voyez-vous la même page que si vous parcouriez http://static.example.com

Si cela est vrai, vous pouvez nourrir l'image comme ça ...

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

Une autre possibilité pour les hébergeurs de logiciels classiques consiste à utiliser le certificat partagé de nombreux fournisseurs d’hébergement. Vérifiez auprès du support des hébergeurs. Ils sont généralement quelque chose comme ça ...

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

J'espère que vous trouverez tous cela utile!


1
2017-09-29 21:09



Étendre @Jaka Jančar's answer, avez-vous besoin de télécharger les images via AJAX? Vous pouvez remplacer l'appel AJAX par ceci: ajoutez un élément IMG de manière dynamique.

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);
}

De cette façon, votre ressource image est chargée, avec un rappel correct en cas de succès / erreur.

Certains navigateurs peuvent se plaindre que votre page contient à la fois des contenus http et https, mais ce n'est pas très courant (cela semble être désactivé par défaut dans la plupart des navigateurs).


0
2018-04-19 18:30



J'ai rencontré ce problème pour un agrégateur de nouvelles local que je lance, j'ai fini par utiliser la copie de PHP pour transférer les images sur mon serveur, puis les servir SSL.

http://php.net/manual/en/function.copy.php


-1
2018-01-20 12:08