http - How to interpret "Connection: keep-alive, close"? -


मैं जो समझता हूं, एक HTTP कनेक्शन या तो हो सकता है या close

मैंने एक सर्वर को एक HTTP अनुरोध भेजा है:

  प्राप्त / page1 / HTTP / 1.1 होस्ट: server.com कनेक्शन: रख-जिंदा   

और इसका उत्तर दिया:

  HTTP / 1.1 200 ओके कनेक्शन: रख-जिंदा, बंद करें   

मूलतः, मैं मानते हैं कि सर्वर को बग़ल में लगाया गया है क्योंकि जैसे-जैसे प्रतिक्रियाएं, बंद करें अस्पष्ट है।

हालांकि, रिसीवर के रूप में, हम कैसे संभाल ऐसा संदेश? क्या हमें व्याख्या इस हेडलर मान को रखना-जिंदा या close जैसा होना चाहिए?

टीएल; डॉ: क्रोम इस प्रतिक्रिया हैडर को रख-जिंदा के रूप में रखता है और फ़ायरफ़ॉक्स प्रत्येक कनेक्शन को बंद कर देता है, तो एक अप्रत्यक्ष कनेक्शन बनाए रखता है।

मैंने इस प्रश्न पर ठोकर खाई थी क्योंकि मैंने अनुकूलन करने की कोशिश की थी मेरी वेबसाइट के लिए पृष्ठ लोड होने का समय।

संदर्भित आरएफसी में मुझे इस बारे में कुछ नहीं पता था कि कनेक्शन हैडर में कितने प्रविष्टियाँ ठीक से नियंत्रित हो सकती हैं ऐसा प्रतीत होता है कि कार्यान्वयन दो संभावनाओं में से चुन सकता है:

  1. यदि कई प्रविष्टियां हैं, तो आप चुन सकते हैं कि आपकी ज़रूरतों के लिए सबसे अच्छा फिट है
  2. अगर कोई < कोड> बंद अंदर, आप ट्रांसमिशन के बाद कनेक्शन बंद कर सकते हैं

    तो, मुझे पता लगाना होगा। चलिए कुछ गहन जांच करें:

    मैंने देखा है कि क्रोम हमेशा कनेक्शन के साथ एक HTTP / 1.1 अनुरोध भेज रहा था: रहते रहो और मेरा अपाचे डिफ़ॉल्ट कॉन्फ़िगरेशन हमेशा एक कनेक्शन: बंद करें शीर्षलेख इसलिए मैंने जांच शुरू की और वायरस शार्क के साथ टीसीपी सेगमेंट पर एक नज़र डाला।

    क्रोम को वेबसाइट प्रदर्शित करने के लिए 14 तत्वों को प्राप्त करना है, इनमें से अधिकतर छवियों या सीएसएस फ़ाइलों जैसी स्थिर चीजें और इसे पूरे 14 टीसीपी कनेक्शनों में लिया गया और उसमें बहुत समय लग गया (लगभग 1,2 सेकंड)। एक छवि के प्रत्येक अनुरोध के बाद (उदा।) FIN फ्लैग सेट 1 से एक टीसीपी सेगमेंट आया।

    तो क्रोम बनाम फ़ायरफ़ॉक्स के बारे में क्या? क्रोम के एक सर्वर के लिए अधिकतम संख्या में समवर्ती कनेक्शन हैं। फ़ायरफ़ॉक्स में अधिक दानेदार कॉन्फ़िगरेशन है और लगातार (मैक्सिमम का 6, लगभग: कॉन्फ़िग में देखा जाता है) और निरंतर (अधिकतम संख्या अलग-अलग स्रोतों में बहुत अलग है )। लेकिन प्रतीक्षा करें ... क्रोम और फ़ायरफ़ॉक्स, एचटीटीपी / 1.1 अनुरोध हेडर्स को कनेक्शन: रख-जिंदा के साथ भेज रहे हैं, इसलिए दोनों 6 तक सीमित होना चाहिए (क्योंकि यह लगातार कनेक्शन खोलने का अनुरोध है )।

    मैंने एक साधारण चाल की कोशिश करने का फैसला किया और वेब रूट फोल्डर में मेरे .htaccess में निम्न पंक्तियां जोड़ दीं:

      & lt; IfModule mod_headers.c & gt; हैडर सेट कनेक्शन-रहते रहते हैं & lt; / ifModule & gt;   

    सर्वर अब इसका जवाब देता है:

      कनेक्शन: रख-जिंदा, बंद करें   

    अब मैंने एक नज़र लिया टीसीपी सेगमेंट में फिर से: क्रोम से सिर्फ 9 सर्वर मेरे सर्वर पर थे और केवल <3> FIN फ्लैग 1 से सेट कर दिया गया। तो यह चाल काम करने के लिए लग रहा था। लेकिन उन तीन कनेक्शन क्यों थे, जो डेटा ट्रांसमिशन के बाद कनेक्शन बंद कर देते हैं? ये PHP अनुरोध थे, जैसे HTTP हेडर X-Powered-By: PHP / 5.4.11 पुष्टि हुई।

    और फ़ायरफ़ॉक्स के बारे में क्या है? अभी भी उन 14 अनुरोध थे!

    यह तय कैसे करें और एफसीजी प्रक्रियाओं को रखने-जीवित के साथ काम करने के लिए भी?

    मैंने निम्नलिखित लाइनों को मेरे वर्चुअलहोस्ट अनुभाग में httpd.conf विन्यास के जोड़ दिया है: <पूर्व> KeepAliveTimeout पर 5 MaxKeepAliveRequests 100

    और .htaccess में जोड़े गए लोगों को हटा दिया गया है। अब सर्वर किसी भी भ्रमित नहीं भेज रहा है - कनेक्शन: रख-जिंदा, बंद करें , लेकिन केवल कनेक्शन: रख-जिंदा और सबकुछ ठीक काम करती है!

    निष्कर्ष:

    कनेक्शन फ़ील्ड के साथ एक शीर्ष सेट

      HTTP / 1.1 200 ओके कनेक्शन: रख-जिंदा, बंद करें   

    को क्रोम द्वारा रख-जिंदा के रूप में समझाया जाएगा, जबकि फ़ायरफ़ॉक्स प्रत्येक कनेक्शन को बंद करने लगता है ऐसा लगता है कि वास्तविक कार्यान्वयन पर निर्भर है।

    इसलिए यदि आप एक ग्राहक को प्रतिक्रिया वाले हेडर से निपटने के लिए तैयार हैं जिसमें कनेक्शन: रख-जिंदा, बंद करें , मैं प्रस्ताव देगा यदि आप एक से अधिक अनुरोध की आवश्यकता रखते हैं, तो जीवित रहने का प्रयास करने के लिए। सबसे खराब चीज जो हो सकती है: सर्वर कनेक्शन को बंद कर देगा और आपको फिर से कनेक्ट करने की आवश्यकता होगी (यह बिल्कुल अन्य विकल्प जो आपके पास होता!)

Comments

Popular posts from this blog

Python SQLAlchemy:AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'schema' -

java - How not to audit a join table and related entities using Hibernate Envers? -

mongodb - CakePHP paginator ignoring order, but only for certain values -