2017-03-06 7 views
21

HTTP keepalive तंत्र में एक ज्ञात रेस स्थिति मौजूद है:ब्राउजर HTTP रखरखाव दौड़ की स्थिति कैसे संभालते हैं?

मैं समझता हूँ के रूप में, मैं अपने HTTP ग्राहक की जरूरत है या तो मेरी HTTP सर्वर की तुलना में कम समय समाप्त करने के लिए , या टीसीपी-एफआईएन या टीसीपी-आरएसटी प्राप्त करते समय पुनः प्रयास करें।

मेरा सवाल यह है कि आज के वेब ब्राउज़र कैसे use the HTTP keepalive feature, इस दौड़ की स्थिति को संभालें। क्या वे पुनः प्रयास करते हैं?

मैं संदर्भों के लिए खुश रहूंगा, एक Google खोज कुछ भी नहीं आ गई है।

उत्तर

16

RFC के अनुसार, इन मामलों में, सर्वर को 408 त्रुटि कोड के साथ जवाब देना चाहिए, क्लाइंट को संकेत देना कि कनेक्शन पहले से ही बंद हो चुका है। चूंकि आरएफसी राज्य करता है:

यदि ग्राहक के पास पारगमन में एक उत्कृष्ट अनुरोध है, तो ग्राहक एक नए कनेक्शन पर अनुरोध दोहराएं।

इसका मतलब यह है कि यह 408 प्रतिक्रिया को संभालने का तरीका तय करने के लिए क्लाइंट (उर्फ प्रत्येक ब्राउज़र) पर निर्भर करता है। वहाँ 2 विकल्प हैं:

  • संभाल यह शान से: पुन: प्रयास करने के लिए एक नया संबंध में शेष अनुरोध स्वचालित रूप से, ताकि उपयोगकर्ता अंतर्निहित विफलता कि क्या हुआ
  • पूरी तरह से अनजान रहता है असफल फास्ट: उपयोगकर्ता एक विफलता दिखा उचित 408 त्रुटि संदेश

उदाहरण के लिए, ऐसा लगता है कि अतीत में क्रोम एक बिंदु तक दूसरे दृष्टिकोण का पालन कर रहा था, जहां लोगों ने इसे "छोटी गाड़ी" व्यवहार के रूप में विचार करना शुरू किया और पहले के लिए स्विच किया। आप क्रोमियम बग here से संबंधित बग थ्रेड पा सकते हैं और संबंधित कोड here बदल सकते हैं।

नोट: जैसा कि आप लिंक किए गए थ्रेड में अंतिम ईमेल में पढ़ सकते हैं, क्रोम इन रीट्रीज़ करता है, केवल तभी जब कुछ अनुरोध इस कनेक्शन में सफल होते हैं। नतीजतन, यदि आप एक अनुरोध के साथ पुन: उत्पन्न करने का प्रयास करते हैं, तो 408 प्रतिक्रिया लौटाते हुए, आप देखेंगे कि क्रोम शायद उस मामले में पुनः प्रयास नहीं करेगा।

+0

समय लेने और शोध करने के लिए धन्यवाद। –

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