यह विचित्र है, मैं सोच रहा था कि अगर किसी को भी इस क्यों हुआ पर कुछ प्रकाश डाला सकता है पर चल निष्पादित नहीं करता है।JSONP कॉलबैक जब स्थानीय होस्ट
असल में, मैं JSONP का परीक्षण करना तो मैं एक JSON वेब सेवा अन्य साइटों का उपयोग कर सकते लागू कर सकते हैं की कोशिश कर बाहर मेरे बाल खींच रहा है। मैं लोकलहोस्ट पर विकास कर रहा हूं - विशेष रूप से, विजुअल स्टूडियो 2008 और विजुअल स्टूडियो 2008 के अंतर्निर्मित वेब सर्वर।
तो एक JSONP परीक्षण चालन डब्ल्यू/jQuery के रूप में, मैं निम्नलिखित कार्यान्वित:
$().ready(function() {
debugger;
try {
$.getJSON("<%= new Uri(Request.Url, "/").ToString() %>XssTest?callback=?", function(data) {
alert(data.abc);
});
} catch (err) {
alert(err);
}
});
और सर्वर पर ..
<%= Request["callback"] %>({abc : 'def'})
तो क्या हो रहा समाप्त होता है मैं पर एक ब्रेकपाइंट सेट सर्वर और मुझे पहले "डीबगर" पर ब्रेकपॉइंट मिलता है; क्लाइंट-साइड स्क्रिप्ट के साथ-साथ सर्वर पर भी स्टेटमेंट। पेज लोड के बाद JSONP यूआरएल वास्तव में लागू किया जा रहा है। यह बहुत अच्छा काम कर रहा है।
मेरी समस्या यह थी कि कॉलबैक कभी निष्पादित नहीं होगा। मैंने आईई 8 के साथ-साथ फ़ायरफ़ॉक्स 3.5 में इसका परीक्षण किया। कोई भी कॉलबैक का आह्वान नहीं करेगा। पकड़ (गलती) कभी नहीं पहुंची थी, या तो। कुछ भी नहीं हुआ!
मैं एक सप्ताह के लिए इस पर अटक कर रहा था, और यहां तक कि एक मैन्युअल रूप से बंद HTTP सुनिश्चित करें कि सर्वर प्रारूप लौटा रहा है होने के लिए निर्दिष्ट पोर्ट पर टेलनेट में अनुरोध के साथ परीक्षण किया ...
callbackfn({abc : 'def'})
.. और यह है।
फिर यह मुझ पर लगा, क्या एक globalizer साथ स्थानीय होस्ट करने के लिए अगर मैं स्थानीय होस्ट से होस्ट नाम बदलने ('।'), यानी http://localhost:41559/ के बजाय http://localhost.:41559/ (हाँ, किसी भी होस्ट नाम के लिए एक बिंदु जोड़ने, कानूनी है यह DNS करने के लिए है global::
सी # नामस्थानों के लिए है)। और फिर यह काम किया! इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स 3.5 ने अंत में मुझे एक चेतावनी संदेश दिखाया जब मैंने अभी एक डॉट जोड़ा।
तो इससे मुझे आश्चर्य होता है, यहां क्या हो रहा है? देर से लिपि टैग पीढ़ी इंटरनेट होस्टनाम के साथ क्यों काम करेगी, न कि स्थानीय लोकहोस्ट के साथ? या यह सही सवाल है?
जाहिर है इस सुरक्षा कारणों के लिए लागू किया गया है, लेकिन वे क्या सुरक्षित करने के लिए कोशिश कर रहे हैं ?? और, इसे एक डॉट के साथ काम करने के लिए, क्या मैंने अभी इस सुरक्षा सुविधा में सुरक्षा छेद का पर्दाफाश किया था?
वैसे, मेरे मेजबान फ़ाइल है, जबकि अन्य मेजबान के लिए बदल, कुछ खास नहीं स्थानीय होस्ट के साथ चल रहा है; डिफ़ॉल्ट 127.0.0.1/:: 1 अभी भी बिना किसी ओवरराइड के स्थान पर हैं।
फ़ॉलो-अप:
127.0.0.1 local.mysite.com
.. करने के लिए अपने मेजबान फ़ाइल, फिर मेरे Global.asax के लिए निम्न कोड जोड़ने:
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Headers["Host"].Split(':')[0] == "localhost")
{
Response.Redirect(
Request.Url.Scheme
+ "://"
+ "local.mysite.com"
+ ":" + Request.Url.Port.ToString()
+ Request.Url.PathAndQuery
, true);
}
}
मैं जोड़कर स्थानीय विकास प्रयोजनों के लिए इस पिछले मिला
मैं फ़ायरबग जैसे टूल का उपयोग करने का सुझाव देता हूं और देखता हूं कि जेएसओएनपी सामान के लिए "स्क्रिप्ट" अनुरोध किया जा रहा है, और वास्तव में देखें कि कौन सा डेटा वापस आ रहा है। –
डेटा मान्य था। जैसा कि वर्णन किया गया है, वर्कअराउंड स्थानीयहोस्ट से दूर होना था (स्क्रिप्ट और डेटा अन्यथा वही रहे) और यह "निश्चित" है, लेकिन यह पूरी तरह से समझा नहीं रहा है कि क्या हो रहा है। –
हां, यही कारण है कि मैं अवांछित संस्करण के लिए घटनाओं को लॉगिंग करने का सुझाव देता हूं। –