Traiter avec l'adresse HTTP du contenu dans les pages HTTPS
Nous avons un site qui est entièrement accessible via HTTPS, mais parfois affichage de contenu externe qui est HTTP (images à partir de flux RSS, principalement). La grande majorité de nos utilisateurs sont également collé sur IE6.
J'ai l'idéal serait de faire les deux opérations suivantes
- Empêcher l'IE message d'avertissement sur un contenu non sécurisé (afin que je puisse montrer moins sévère, par ex. en remplaçant les images par défaut avec une icône comme ci-dessous)
- Présenter quelque chose d'utile pour les utilisateurs à la place des images qu'ils ne peuvent pas voir autrement; si il y avait une certaine JS j'ai pu courir à comprendre que les images n'ont pas été chargés et de les remplacer par une image de la nôtre au lieu de cela, ce serait super.
J'imagine que le but premier n'est tout simplement pas possible, mais le second peut être suffisant.
Le pire des cas, c'est que j'ai analyser le flux RSS lorsque nous importer, de saisir les images, de les stocker localement afin que les utilisateurs puissent y accéder de cette façon, mais il semble comme beaucoup de douleur pour raisonnablement peu de gain.
Vous devez vous connecter pour publier un commentaire.
Votre pire scénario n'est pas aussi mauvais que vous le pensez.
Vous êtes déjà l'analyse du flux RSS, vous avez déjà l'image d'Url. Disons que vous avez un URL de l'image comme
http://otherdomain.com/someimage.jpg
. Vous réécrivez cette URLhttps://mydomain.com/imageserver?url=http://otherdomain.com/someimage.jpg&hash=abcdeafad
. De cette façon, le navigateur fait une requête https, afin que vous vous débarrasser de ces problèmes.La prochaine partie - créer une page proxy ou servlet qui effectue les opérations suivantes -
Cette solution présente certains avantages. Vous n'avez pas à télécharger l'image au moment de la création de l'html. Vous n'avez pas à stocker les images localement. Aussi, vous êtes apatride; l'url contient toutes les informations nécessaires pour servir de l'image.
Enfin, le paramètre de hachage est pour la sécurité, vous ne voulez que votre servlet pour servir des images pour les url que vous avez construit. Ainsi, lorsque vous créez l'url, de calculer, de
md5(image_url + secret_key)
et d'ajouter que le paramètre de hachage. Avant de vous servir de la demande, de recalculer la valeur de hachage et de le comparer à ce qui a été transmis à vous. Depuis le secret_key n'est connue que de vous, personne d'autre ne peut construire des url valides.Si vous développez en java, Servlet est juste quelques lignes de code. Vous devriez être capable de port le code ci-dessous sur un autre back-end de la technologie.
Si vous êtes à la recherche d'une solution rapide à charger des images sur HTTPS, alors le libre service reverse proxy à https://images.weserv.nl/ peut vous intéresser. C'était exactement ce que je cherchais.
Si vous êtes à la recherche d'un solution, je l'ai déjà utilisé Cloudinary.com qui fonctionne aussi bien mais il est trop cher pour cette seule tâche, à mon avis.
Je ne sais pas si cela pourrait convenir à ce que vous faites, mais comme une solution rapide, je "wrap", le contenu du protocole http en https script. Par exemple, sur votre page, qui est servi par https, je voudrais introduire un iframe qui permettrait de remplacer votre flux rss et à la src attr de l'iframe mettre l'url d'un script sur votre serveur et qui capte l'alimentation et les sorties de l'html. le script est la lecture de l'alimentation via http et sorties via https (donc le "wrapping")
Juste une pensée
Au sujet de votre deuxième exigence: vous pourriez être en mesure d'utiliser l'événement onerror, c'est à dire.
<img onerror="some javascript;"...
Mise à jour:
Vous pouvez également essayer une itération à travers
document.images
dans les dom. Il y a uncomplete
propriété booléenne qui vous pourriez être en mesure d'utiliser. Je ne sais pas pour vous si cela sera approprié, mais peut être utile de l'examiner.Il serait préférable d'avoir le contenu du protocole http à https
Parfois, comme dans facebook apps, nous ne pouvons pas avoir de non-sécuriser le contenu dans la page sécurisée. nous ne pouvons pas faire de ces contenus. par exemple une application qui vous permettra de charger dans l'iFrame n'est pas un simple contenu et nous ne pouvons pas faire local.
Je pense que nous ne devrions jamais charger l'adresse http du contenu en https, il convient également de ne pas secours page https vers http version d'éviter les erreurs de dialogue.
le seul moyen qui permettra d'assurer la sécurité de l'utilisateur est d'utiliser le protocole https version de tous les contenus, http://developers.facebook.com/blog/post/499/
Accepté la réponse m'a aidé à mettre à jour cette fois de PHP ainsi que de la SCRO, j'ai donc pensé que je pourrais inclure la solution pour les autres:
pur PHP/HTML:
javascript/jQuery:
imageserve.php
voir http://stackoverflow.com/questions/8719276/cors-with-php-headers?noredirect=1&lq=1 pour en savoir plus sur la SCRO
Simplement: NE PAS le FAIRE. L'adresse Http du Contenu dans une page HTTPS est par nature précaire. Point. C'est pourquoi IE affiche un avertissement. Se débarrasser de l'avertissement est une bête de la foutaise approche.
Au lieu de cela, une page HTTPS devrait seulement ont contenu HTTPS. Assurez-vous que le contenu peut être chargé via HTTPS, trop, et le référencer via https si la page est chargée via le protocole https. Pour du contenu externe, cela signifie le chargement et la mise en cache des éléments localement, de sorte qu'ils sont disponibles via https - sûr. Pas moyen de contourner cela, malheureusement.
L'avertissement est là pour une bonne raison. Sérieusement. Passez 5 minutes à penser comment vous pourrait prendre plus d'un https page avec du contenu personnalisé, vous serez surpris.
Je me rends compte que c'est un vieux thread mais une option, c'est juste pour enlever le http: la partie de l'URL de l'image, de sorte que " http://some/image.jpg "devient" //some/image.jpg'. Cela permettra également de travailler avec les Cdn
Meilleure façon de travailler pour moi