2010-12-30 15 views
20

मैं AJAX को एक सुरक्षित सर्वर पर कॉल करना चाहता हूं जो स्वयं हस्ताक्षरित प्रमाणपत्र का उपयोग करता है। उस माहौल में जहां मेरा ऐप इस्तेमाल किया जा रहा है, यह ठीक है - मैं उपयोगकर्ताओं को सीए प्रमाण प्रदान कर सकता हूं और ऐप का उपयोग करने से पहले इसे इंस्टॉल कर सकता हूं। हालांकि, कभी-कभी, उपयोगकर्ता कर्ट इंस्टॉल करने से पहले ऐप पर जाने का प्रयास करता है। इन मामलों में, ऐप चुपचाप विफल रहता है - कम से कम फ़ायरफ़ॉक्स (समस्या का सबसे आम मामला) में, ऐसा लगता है कि कॉल चुपचाप मर जाता है, बिना त्रुटि हैंडलर को फायरिंग के। FWIW, यदि उपयोगकर्ता सर्वर पर वास्तविक पृष्ठ पर जाता है, तो उन्हें एक प्रमाणपत्र चेतावनी मिलती है।AJAX अविश्वसनीय (स्वयं हस्ताक्षरित) HTTPS को कॉल करता है चुपचाप

मैं एक कामकाज में हैक कर सकता हूं - कहें, एक दिल की धड़कन/पिंग अनुरोध करें और यह देखने के लिए एक वॉचडॉग टाइमर सेट करें कि क्या सर्वर समय पर जवाब देता है - लेकिन ऐसा लगता है, हैकी। मैं समय से पहले कनेक्शन का परीक्षण करने में सक्षम होना पसंद करूंगा। यह सुनिश्चित करने के लिए "सही" तरीका क्या है कि जिस सर्वर से आप बात करना चाहते हैं, उसके पास जावास्क्रिप्ट के भीतर से एक विश्वसनीय प्रमाण है? अगर इससे कोई फर्क पड़ता है, तो मैं JQuery के माध्यम से अपने AJAX अनुरोध कर रहा हूं।

अद्यतन: यहां एक शानदार पंचलाइन है। बाहर निकलता है, AJAX बिल्कुल समस्या नहीं थी। मुझे यकीन था कि यह स्वयं के हस्ताक्षरित चेतावनी से संबंधित लक्षणों के आधार पर था, लेकिन AJAX त्रुटि की कमी परेशान थी, esp। नीचे दिए गए उत्तर में दिए गए स्पेक को दिया गया है। एक अन्य टीम के सदस्य ने इसे दबाया: AJAX त्रुटि हैंडलर फायरिंग नहीं कर रहे थे क्योंकि JQuery को कभी भी लोड नहीं किया गया था! हम JQuery को हमारी साइट के किसी अन्य सबडोमेन से भी शामिल कर रहे थे, जिसे HTTPS पर भी होस्ट किया गया था - और उपयोगकर्ताओं ने हमारेService.example.com के लिए अपवाद जोड़े थे लेकिन js.example.com नहीं। जाहिर है यदि आप गैर-भरोसेमंद सुरक्षित कनेक्शन पर <script> टैग इंगित करते हैं, कि चुपचाप विफल रहता है।

{/ headdesk}

+0

क्या व्यवहार आप सर्वर से संपर्क करने में सक्षम नहीं होने से अलग दिख रहे हैं, जैसे आपका नेटवर्क कनेक्शन दूर हो जाता है? – martona

उत्तर

14

XMLHttpRequests (AJAX अनुरोध) केवल एक ही मूल के सर्वर पर अनुमति दी जाती है। इसका मतलब है कि योजना: // होस्ट: लक्ष्य URL का बंदरगाह भाग वर्तमान दस्तावेज़ से मेल खाना है। Spec के अनुसार, आपको गैर-SSL एक से SSL URL पर अनुरोध करने की भी अनुमति नहीं दी जानी चाहिए।

मुझे लगता है कि कम हैकिश समाधान यह है कि आप बस सभी उपयोगकर्ताओं को SSL साइट पर मजबूर-रीडायरेक्ट करते हैं। इस तरह से किसी भी AJAX अनुरोध किए जाने से पहले उन्हें प्रमाणपत्र चेतावनी देखने के लिए मजबूर किया जाएगा।

नोट: कल्पना भी कहता है कि TLS हैंडशेक विफलता के मामले (जो मैं इस मामले एक तरह से, के अंतर्गत आता है मान लेते हैं) यह एक NETWORK_ERR (कोड 19) अपवाद फेंक चाहिए में। AJAX अनुरोध शुरू करते समय आप अपवाद को पकड़ने का प्रयास कर सकते हैं। अधिक जानकारी के लिए त्रुटि प्रबंधन पर the spec का संदर्भ लें।

+2

आप पहले पैराग्राफ में सही थे और दूसरे में नहीं। कोई ब्राउज़र स्वतंत्र रूप से XMLHTTPRequest को HTTP से HTTPS तक बनाने की अनुमति नहीं देगा। कुछ ब्राउज़रों (जैसे फ़ायरफ़ॉक्स) में ऑप्ट-इन तंत्र की अनुमति है (जैसे एक्सेस-कंट्रोल-ऑब्जेक्ट-हेडिन हेडर)। आईई में ऐसी कोई व्यवस्था नहीं है। – EricLaw

+0

पुष्टि करने के लिए धन्यवाद, मैंने इसे संपादित किया। – Seldaek

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