2015-11-03 19 views
25

में एक HTTP AJAX के आपरेशन चल रहा है मैं एक रूप है जो मैं एक सीआरएम (ViciDial) को प्रस्तुत कर रहा हूँ (जीईटी के माध्यम से के रूप में यह इस तरह से की आवश्यकता है) है। मैं फॉर्म को सफलतापूर्वक सबमिट कर सकता हूं हालांकि यदि मैं करता हूं कि सीआरएम पर प्रसंस्करण फ़ाइल केवल एक सफल पाठ को प्रतिबिंबित करेगी और यही वह है।"मिश्रित सामग्री अवरुद्ध" जब एक HTTPS पेज

उस पाठ के बजाय, मैं अपनी वेबसाइट पर एक धन्यवाद पृष्ठ प्रदर्शित करना चाहता हूं, इसलिए मैंने फॉर्म जमा करने के लिए AJAX का उपयोग करने का निर्णय लिया और मुझे जिस पृष्ठ की आवश्यकता है उसे रीडायरेक्ट करने का निर्णय लिया, हालांकि मुझे यह त्रुटि मेरे पास मिल रही है ब्राउज़र:

मिश्रित सामग्री: 'https://page.com' पर पृष्ठ HTTPS पर लोड किया गया था, लेकिन एक असुरक्षित XMLHttpRequest endpoint 'http://XX.XXX.XX.XXX/vicidial/non_agent_api.php?queries=query=data' का अनुरोध किया। यह अनुरोध अवरुद्ध कर दिया गया है; सामग्री HTTPS पर परोसा जाना चाहिए।

यह मेरा AJAX स्क्रिप्ट है:

<script> 
    SubmitFormClickToCall = function(){ 

     jQuery.ajax({ 
      url: "http://XX.XXX.XX.XX/vicidial/non_agent_api.php", 
      data : jQuery("#form-click-to-call").serialize(), 
      type : "GET", 
      processData: false, 
      contentType: false, 
      success: function(data){ 
       window.location.href = "https://www.example.com/thank-you"; 
      } 
     }); 
    } 
    </script> 

बस URL काम नहीं करेगा में https की स्थापना, वहाँ किसी भी तरह से, जिसमें मैं अपने thankyou करने के लिए मिल के माध्यम से डेटा सबमिट करें और उपयोगकर्ता अनुप्रेषित कर सकते हैं है पृष्ठ?

============================

समस्या यहाँ मिश्रित सामग्री था, जिसका मतलब यह है कि मैं के माध्यम से एक पृष्ठ लोड एचटीटीपीएस और AJAX एपीआई के माध्यम से हिट करने की कोशिश कर रहा था जो HTTP में था। लेकिन ब्राउज़र हमें ऐसा करने की अनुमति नहीं देगा।

तो तुम सेट नहीं कर सकता है, तो एपीआई HTTPS होने के लिए (यह मेरा मामला था) हम अभी भी एक अलग तरीके से इस संपर्क कर सकते हैं।

मुख्य समस्या मिश्रित सामग्री मुद्दा यह है कि मैं एक फैंसी करने के लिए एक एपीआई के लिए डेटा सबमिट करें और उन रीडायरेक्ट करने के लिए धन्यवाद पृष्ठ चाहता था नहीं था। AJAX का उपयोग करने के बजाय, मैंने एक php फ़ाइल बनाई है जो डेटा को एपीआई में कर्ल का उपयोग करके भेजता है (क्योंकि यह सर्वर पक्ष किया जा रहा है कोई मिश्रित सामग्री समस्या नहीं है) और मेरे खुश उपयोगकर्ता को एक फैंसी धन्यवाद पृष्ठ पर रीडायरेक्ट करता है।

+0

क्या आपके पास अपने एपीआई का एक सुरक्षित संस्करण है? यदि आप मूल साइट के रूप में मूल साइट का उपयोग कर रहे हैं तो आपको HTTPS पर अनुरोध करने की आवश्यकता होगी। –

+1

नहीं, मैं नहीं करता, क्या कोई अन्य तरीका है जिसमें मैं ऐसा कर सकता हूं? मेरा मतलब है कि अगर अनुरोध अजाक्स – StormRage

+0

के साथ सबमिट फॉर्म का उपयोग करें, तो आप HTTP पर 'XX.XXX.XX.XX' पर प्रॉक्सी करने के लिए अपाचे में एक HTTPS URL बना सकते हैं। हालांकि, यदि HTTP का उद्देश्य उपयोगकर्ता की जानकारी की रक्षा करना है, तो आपको सावधान रहना होगा कि सर्वर के बीच का मार्ग सार्वजनिक इंटरनेट पर नहीं जाता है। – halfer

उत्तर

30

यदि आप HTTPS का उपयोग कर अपने ब्राउज़र में एक पृष्ठ लोड करते हैं, तो ब्राउज़र HTTP पर किसी भी संसाधन को लोड करने से इंकार कर देगा। जैसा कि आपने कोशिश की है, HTTP के बजाय HTTPS रखने के लिए API URL को बदलना आम तौर पर इस समस्या को हल करता है। हालांकि, आपके एपीआई को HTTPS कनेक्शन की अनुमति नहीं देनी चाहिए। इस वजह से, आपको या तो मुख्य पृष्ठ पर HTTP को मजबूर करना होगा या अनुरोध करना होगा कि वे HTTPS कनेक्शन को अनुमति दें।

इस पर ध्यान दें: अगर आप AJAX के साथ इसे लोड करने का प्रयास करने के बजाय API URL पर जाते हैं तो अनुरोध अभी भी काम करेगा। ऐसा इसलिए है क्योंकि ब्राउज़र एक सुरक्षित पृष्ठ के भीतर से संसाधन लोड नहीं कर रहा है, इसके बजाय यह एक असुरक्षित पृष्ठ लोड कर रहा है और यह स्वीकार कर रहा है। AJAX के माध्यम से उपलब्ध होने के लिए, हालांकि, प्रोटोकॉल का मिलान होना चाहिए।

+1

ठीक है, एपीआई मेरे सर्वर में है, क्या कोई गाइड है जिसे मैं https बनाने के लिए अनुसरण कर सकता हूं? – StormRage

+0

@StormRage बिल्कुल! आप किस प्रकार का सर्वर चल रहे हैं? अमरीका की एक मूल जनजाति? क्या यह होस्टिंग या एक निजी सर्वर साझा किया गया है? –

+0

@StormRage कृपया मुझे बताएं कि आपको और सहायता की आवश्यकता है या नहीं। अन्यथा, वोटिंग उन सार्वजनिक सहायता को प्रोत्साहित करेगी जो आप यहां प्राप्त करते हैं। –

0

यदि आपका एपीआई कोड node.js सर्वर पर चल रहा है तो आपको अपाचे या एनजीआईएनएक्स में नहीं, बल्कि अपना ध्यान केंद्रित करने की आवश्यकता है। मिकेल सही है, एपीआई यूआरएल को एचटीटीपीएस में बदलना उत्तर है, लेकिन यदि आपका एपीआई node.js सर्वर को कॉल कर रहा है, तो यह बेहतर HTTPS के लिए सेट अप किया जाएगा! और निश्चित रूप से, node.js सर्वर किसी भी अप्रयुक्त बंदरगाह पर हो सकता है, यह पोर्ट 443 होना आवश्यक नहीं है।

+0

एपीआई तीसरी पार्टी थी, इसलिए कोई तरीका नहीं था कि मैं इसे https पर सेट कर सकूं, और जैसा कि आप यूआरएल में देख सकते हैं, मैं एपीआई को मारने की कोशिश कर रहा था, एपीआई PHP – StormRage

+0

@StormRage में कोड किया गया था आपका प्रश्न और मिकेल के जवाब ने मेरी समस्या का समाधान किया, इसलिए मैंने सोचा कि मैं इसे यहां नोट कर दूंगा, भले ही मेरा उत्तर वास्तव में आपकी स्थिति पर लागू न हो। – mcmacerson

+0

ठीक है, आप और मिकेल सही हैं, एपीआई में एसएसएल का उपयोग करने का सबसे उचित समाधान होगा, लेकिन इस संदर्भ में मैं ऐसा करने में सक्षम नहीं था क्योंकि यह एक तृतीय पक्ष एपीआई था, लेकिन वर्डप्रेस का उपयोग करके पीपीएल का समाधान या कोई विरासत साइट डेटा को उनके बैकएंड में भेज सकती है और सर्वर के भीतर एपीआई को अनुरोध भेज सकती है। – StormRage

0

अजाक्स पोस्ट विधि का उपयोग करने के बजाय, आप तत्व के साथ गतिशील रूप का उपयोग कर सकते हैं। यह काम करेगा भी पेज एसएसएल में लोड किया गया है और सबमिट स्रोत गैर एसएसएल है।

आपको फ़ॉर्म के तत्व का मूल्य मान निर्धारित करने की आवश्यकता है।

असल में नए गतिशील रूप ब्राउज़र की अलग टैब में के रूप में गैर SSL मोड खुलेगा जब लक्ष्य विशेषता की स्थापना की है '_blank'

var f = document.createElement('form'); 
f.action='http://XX.XXX.XX.XX/vicidial/non_agent_api.php'; 
f.method='POST'; 
//f.target='_blank'; 
//f.enctype="multipart/form-data" 

var k=document.createElement('input'); 
k.type='hidden';k.name='CustomerID'; 
k.value='7299'; 
f.appendChild(k); 



//var z=document.getElementById("FileNameId") 
//z.setAttribute("name", "IDProof"); 
//z.setAttribute("id", "IDProof"); 
//f.appendChild(z); 

document.body.appendChild(f); 
f.submit() 
0

मैं HTML पृष्ठ को यह जोड़कर इस संकल्प लिया है, क्योंकि हम कर रहे हैं तीसरे पक्ष एपीआई का उपयोग करना जो हमारे द्वारा नियंत्रित नहीं है।

<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> 

आशा है कि यह मदद करेगा, और एक रिकॉर्ड के लिए भी।

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