2009-04-19 25 views
22

मेरी https वेबसाइट पर, मैं प्रमाण पत्र के बिना किसी वेबसाइट से छवियों को कैसे प्रदर्शित कर सकता हूं?HTTPS कनेक्शन पर गैर-SSL छवियों को कैसे प्रदर्शित करें?

मेरा स्वामित्व उदाहरण डोमेन:

  • http: // www .example.com
  • http: // स्थिर .example.com (मेरी CDN के लिए प्रयोग किया जाता)

मैं .example.com लेकिन के लिए नहीं स्थिर .example.com www के लिए एक प्रमाण पत्र के मालिक हैं।

मेरी www.example.com डोमेन पर, आप http का उपयोग कर SSL पर सेवा के लिए रजिस्टर कर सकते हैं एस: (। Www) //www.example.com

पंजीकरण फार्म पर, मैं चाहता हूँ मेरे सीडीएन से छवियां प्रदर्शित करें जो http: // स्थिर .example.com पर है लेकिन उस सबडोमेन के लिए प्रमाणपत्र नहीं है।

https: // www.example.com पंजीकरण फार्म - मैं AJAX का उपयोग कर रहा गतिशील http से छवि पर खींचने के लिए: // static.example.com। ऐसा लगता है कि वेब ब्राउज़र AJAX का उपयोग करते समय गैर-SSL छवियों को बिल्कुल प्रदर्शित नहीं करता है। हालांकि, यदि वह छवि http एस: //www.example.com डोमेन (पंजीकरण फ़ॉर्म के समान) पर स्थित थी, तो छवि AJAX के माध्यम से प्रदर्शित होगी।

वास्तुकला & डिजाइन कारणों के लिए, मैं एक प्रमाण पत्र खरीदे बिना ही मेरी CDN (static.example.com) पर उन चित्रों को बनाए रखना चाहते हैं।

क्या कोई जानता है कि मैं अपने गैर-एसएसएल सबडोमेन से अपने http एस: //www.example डोमेन पर AJAX के माध्यम से इन छवियों को कैसे प्रदर्शित कर सकता हूं?

अग्रिम धन्यवाद।

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

कुछ ब्राउज़र, हालांकि उपयोगकर्ता के लिए शिकायत कर सकते हैं, यह है कि आप एक सुरक्षित पृष्ठ के लिए असुरक्षित संसाधनों लोड कर रहे हैं:

उत्तर

3

बस आपको एक https छवि को शामिल किया जाएगा पसंद है। आप इसके बारे में कुछ नहीं कर सकते हैं।

+1

AJAX का उपयोग करते समय ब्राउज़र में शिकायत करने के बाद छवि गतिशील रूप से लोड किया जा रहा है ... बजाय, ब्राउज़र बस छवि प्रदर्शित नहीं करता अवसर नहीं मिलता है। इस सवाल के आसपास किसी भी तरह का पूरा सवाल कौन सा है? –

+3

"पूरा सवाल कौन सा है", हे ... यह तब तक नहीं था जब तक आप इसे पूरी तरह बदल नहीं देते। –

+0

लेकिन यह सुरक्षित नहीं है। लोग एसएसएल का उपयोग करने का पूरा कारण गोपनीयता है, http छवियों को भेजने का क्या मतलब है? – jiggunjer

3

static.example.com के प्रमाण पत्र के बिना ऐसा करने का कोई तरीका नहीं है जो कुछ ब्राउज़रों (विशेष रूप से इंटरनेट एक्सप्लोरर) में सुरक्षा चेतावनी या संकेत को ट्रिगर नहीं करेगा।

गोडाडी $ 30ish के लिए एसएसएल प्रमाण पत्र बेचता है। मैं थोड़ी सी नकदी के लिए वसंत कहूंगा।

0

@Jaka Jančar's answer का विस्तार करने के लिए, क्या आपको 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 दोनों सामग्री शामिल हैं, लेकिन यह बहुत आम नहीं है (यह अधिकांश ब्राउज़रों में डिफ़ॉल्ट रूप से बंद होने लगता है)।

1

मुझे पता है कि यह वास्तव में एक पुराना सवाल है, लेकिन सोचा कि मैं अपने $ .02 में फेंक दूंगा।

मैं http://static.example.com का उपडोमेन संभालने हूँ भी http://www.example.com (अर्थात http://www.example.com/static) की उप-निर्देशिका/फ़ोल्डर सबसे इन दिनों की मेजबानी के साथ मामला है के रूप में है।

आप http://www.example.com/static और https://www.example.com/static को यह लेकिन ब्राउज़िंग varify कर सकते हैं ... के रूप में आप अगर आप http://static.example.com

को ब्राउज़ करेंगे, तो यह सच आप इस तरह की छवि फ़ीड कर सकते हैं आप एक ही पृष्ठ क्यों दिखाई देता है ...

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

ठेठ श्रेय होस्टिंग पर उन लोगों के लिए एक अन्य संभावना साझा होस्टिंग प्रदाता कई होस्टिंग प्रदाता का उपयोग कर रही है। होस्टिंग कंपनियों के समर्थन के साथ जांचें। वे आम तौर पर कुछ इस तरह हैं ...

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

आशा है कि आप सभी इस उपयोगी पाते हैं!

+3

विशेष रूप से एक पुराने प्रश्न के लिए, सीधे ब्लॉग आगंतुकों के बजाय सीधे आगंतुकों के बजाय उत्तर पोस्ट करना बेहतर होता। –

+2

मैंने ब्लॉग पोस्ट पर उपयोगकर्ता द्वारा दिए गए उत्तर का उपयोग करने के लिए प्रश्न संपादित किया और बाहरी लिंक हटा दिया। – joshuahedlund

2

आपको https:// संदर्भों का उपयोग करके HTTPS पर प्रदत्त पृष्ठ पर लिंक या एम्बेड (सीधे या AJAX के माध्यम से) की सभी सामग्री की सेवा करनी होगी।

तृतीय पक्ष, सादा-HTTP सामग्री समस्या के आसपास जाने का एक तरीका यह है कि उस सामग्री को एक रिवर्स प्रॉक्सी के माध्यम से सेवा प्रदान करना है जो संभवतः आपकी साइट पर या इसके लिए सेवा पर HTTPS का उपयोग करता है। ऐसा करने में कानूनी निहितार्थ हो सकता है, इस पर निर्भर करता है कि इसे केवल प्रॉक्सी या डुप्लिकेटिंग सामग्री के रूप में माना जाता है (शायद इसी तरह Google कैश करता है)। इसके अलावा, ऐसा करके, आप इस तरह से एम्बेड की गई सामग्री के लिए प्रभावी ढंग से झुका रहे हैं।

16

आप अपना स्वयं का एसएसएल प्रॉक्सी बना सकते हैं।

इस स्क्रिप्ट के माध्यम से सभी छवियां चलाएं। बस एक फाइल बनाएं और इस 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; 
?> 
+1

महान समाधान। – neokio

+1

जोड़ने के लिए एक चीज ... मेरा सर्वर कॉन्फ़िगरेशन '==' युक्त अनुरोधों को अवरुद्ध करता है (क्योंकि उन्हें अक्सर दुर्भावनापूर्ण स्कैन गतिविधि में उपयोग किया जाता है)। 'base64_encode' तार अक्सर' == 'के साथ समाप्त होता है। इसे उपरोक्त कोड में 'urlencode (base64_encode ($ url))' और 'base64_decode (urldecode (@ $ _ GET [' url ']) का उपयोग करके सही किया जा सकता है। – neokio

+3

यह अच्छा है, लेकिन यहां सुरक्षा मुद्दों से सावधान रहें। सुनिश्चित करें कि केवल डोमेन के कुछ यूआरएल लाने की अनुमति दें ... उर्फ ​​श्वेतसूची वाले डोमेन। – fedmich

-1

मैं एक स्थानीय समाचार एग्रीगेटर है कि मैं चलाने के लिए, मैं PHP का उपयोग कर रहा समाप्त हो गया के लिए इस समस्या को मारा छवियों को मेरे सर्वर पर खींचने के लिए कॉपी करें और फिर उन्हें एसएसएल की सेवा करें।

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

संबंधित मुद्दे