2017-09-14 21 views
19

मैं हाल ही में क्रोम में होने वाली एक सुपर-अजीब समस्या के साथ संघर्ष कर रहा हूं: क्योंकि मेरा एपीआई (नोडजेएस) एक अलग सबडोमेन पर है, मुझे अपने सामने से पहुंचने के लिए सीओआरएस का उपयोग करने की आवश्यकता है -एंड (एम्बरजेएस)।क्रोम में सुपर धीमी प्रीफलाइट विकल्प केवल

यह बहुत अच्छी तरह से काम कर रहा है लेकिन मैं बहुत धीमी गति से विकल्प (95% समय) बहुत धीमी विकल्प पूछताछ करता हूं, किसी भी एपीआई कॉल को लगभग 3 सेकंड में देरी करता हूं।

2 requests, OPTIONS takes 3 seconds

इस समय के अधिकांश एक खाली सामग्री डाउनलोड करने में लगा है:

Downloading an empty content takes 3 seconds

यह भी weirder जब मैं एक और वेबसाइट हम एक ऐसी ही वास्तुकला का उपयोग किया पर इस कोशिश कर रहा हूँ हो जाता है, का सामना एक ही समस्या है।

कुछ अन्य बातों मैंने कोशिश की:

  • मैं Firefox और Safari के साथ इस कोशिश कर रहा है, और किसी भी देरी नहीं मिला।
  • मैं इस स्थानीय या उत्पादन में कोशिश कर रहा हूं, उसी देरी का प्रयोग कर रहा हूं।
  • मैं गुप्त मोड (कोई एक्सटेंशन नहीं) के साथ कोशिश कर रहा हूं, और मेरे पास एक ही समस्या है।

हम CORS package के साथ बैक एंड नोडजेएस पर उपयोग कर रहे हैं।

अब, मुझे कोई जानकारी नहीं है कि समस्या क्रोम 60, नोडजेएस, सीओआरएस पैकेज या एम्बरजेएस + jQuery पर है या नहीं।

किसी ने भी इसका अनुभव किया?

+1

हो सकता है कि तुम कर सकते हो मैनुअल '' OPTIONS' curl' या कुछ बाकी अनुरोध परीक्षक की तरह परीक्षक? क्या आपका मतलब है कि आपको फ़ायरफ़ॉक्स पर 'विकल्प' अनुरोध नहीं मिलते हैं, या 'विकल्प' अनुरोध तेज़ है? – Lux

+0

@ लक्स मैंने पोस्टमैन के साथ एक विकल्प अनुरोध को फिर से चलाने की कोशिश की और विलंबता का अनुभव नहीं किया। फ़ायरफ़ॉक्स विकल्प अनुरोध करता है लेकिन यह धीमा नहीं है। –

+1

मुझे पता है कि थोड़ा अजीब लग सकता है लेकिन क्या यह एक http प्रॉक्सी के माध्यम से जा रहा है, मेरा मतलब है कि एपीआई कॉल करते समय एम्बर कोड http प्रॉक्सी के माध्यम से जा रहा है? – vaibhav

उत्तर

4
बस एक नोट के रूप

: यह एक क्रोम बग

लगता है मैं एक अद्वितीय डोमेन

https://domain1.com --> https://domain1.com (No CORS, no delay) 
https://domain2.com --> https://domain1.com (CORS, delay) 

chrome cors

में एक सेवा का उपयोग कर दो DNS नाम के साथ इस मुद्दे को एक सर्वर का उपयोग कर reproduced यह बिल्कुल वही सेवा है जो दो नामों का जवाब दे रही है, इसलिए मैं बिल्कुल वही अनुरोध, क्लाइंट और सर्वर कोड (DNS नाम अदला-बदले योग्य) का परीक्षण कर रहा हूं

साथ परीक्षण किया गया
  • क्रोम 61.0.3163.100 (विंडोज़) -> देरी
  • क्रोम 62.0.3202.84 (Android) -> देरी
  • क्रोम 62.0.3202.84 (आईओएस-Ipad) - > ठीक !!!
  • फ़ायरफ़ॉक्स -> ठीक
  • एज -> ठीक

वर्कअराउंड (मेरे मामले में)।मेरे मेजबान में एक प्रॉक्सी बनाएं एक ही मूल डीएनएस का जवाब और CORS

+0

आपका बैकएंड क्या है? –

+0

अपाचे + टोमकैट (जावा 7) – pedrofb

2

से बचने मैं इस और यह के रूप में हम एक ही समस्या का सामना कर रहे थे एक क्रोम बग प्रतीत होता है डिबग करने की मांग किया गया है करने के लिए।

संदर्भ के लिए, मैं यहाँ क्रोमियम को एक बग रिपोर्ट दायर किया है: CORS pre-flight and subsequent requests are very slow only on Chrome

मैं यहाँ खर्च आधा दिन यह जांच कर रही किसी भी अधिक डेवलपर्स को रोकने में मदद करने के लिए इस जोड़ रहा;) यहाँ और अधिक से हम के रूप में अद्यतन करेंगे क्रोमियम। बग रिपोर्ट के

अवलोकन इस प्रकार है:

UserAgent:

  1. है app.domain.com
  2. :

    Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36

    कदम समस्या पुन: पेश करने फूल टी आइटम

  3. है api.domain.com
  4. , पहुँच DevTools में
  5. चेक प्रतिक्रियाओं सक्षम विकल्पों को देखने और प्राप्त अनुरोधों 300 मि.से +

क्या उम्मीद है अप करने के लिए ले जा रहे हैं करने के लिए एपीआई पर CORS सक्षम करें व्यवहार?

प्रतिक्रिया समय सटीक होना चाहिए।

क्या गड़बड़ी हुई?

हम गो माइक्रोस्कोर्सेस का उपयोग कर रहे हैं और ब्राउज़रों के बीच किए गए समय में एक बड़ी असमानता देखी - क्रोम 100x की तीव्रता तक धीमा है।

जब हम बैकएंड से समय की जाँच कर ली, प्रतिक्रियाओं सबसे 10ms पर, सबसे जा रहा उप 1ms के साथ ले लो। Devtools के तहत समय की जांच करते समय एक ही प्रतिक्रिया ~ 100ms ~ 1s में आ रही थी।

से पहले इसने कार्य किया?

एन/ए

Chrome संस्करण: 63.0.3239.132 चैनल: स्थिर ओएस संस्करण: 10.0 Flash संस्करण:

फ़ायरफ़ॉक्स (और किसी भी अन्य ब्राउज़र) में, ठीक उसी अनुरोधों में लौट ~ अपेक्षित के रूप में 1-20ms।

आगे का निदान करने की कोशिश कर रहा में, हम वास्तविक नेटवर्क प्रतिक्रिया समय की जाँच करने के Telerik के फ़िडलर का इस्तेमाल किया और पुष्टि की है कि वे भेजे और हमारे उम्मीद समय के भीतर क्रोम द्वारा प्राप्त किया जा रहा था। एकमात्र निष्कर्ष यह हो सकता है कि क्रोम के लिए कुछ आंतरिक इन अनुरोधों की प्रक्रिया को धीमा कर रहा है।

हमने chrome://flags#out-of-blink-cors और chrome://flags#enable-site-per-process के सभी क्रमपरिवर्तनों की कोशिश की, जो कि दो विकल्प हैं जिन्हें हमने देखा है जो अस्पष्ट रूप से प्रासंगिक प्रतीत होते हैं। मदद करने के लिए कुछ भी नहीं लग रहा था।

हम भी कई स्टैक ओवरफ़्लो एक इसी तरह के मुद्दों है कि यह एक Chrome बग होने का उल्लेख के बारे में लेख पाया है, लेकिन मैं इसे यहाँ रिपोर्ट ढूँढने में सक्षम नहीं किया गया है:

हम सिर्फ MacOS पर क्रोम परीक्षण किया है और यह एक मुद्दा हो प्रतीत नहीं होता है - तो Windows के लिए सीमित किया जा सकता।

क्रोम: optionsChrome getChrome

एज: optionsEdge getEdge

फ़ायरफ़ॉक्स: optionsFirefox getFirefox

+1

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाले पदों/18561203) –

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