यह HTTP कीप-सजीव के बारे में है, जो एकल टीसीपी सत्र (और, एसएसएल, एक एसएसएल सत्र के साथ) के माध्यम से कई संसाधन अनुरोधों के लिए अनुमति देता है। यह एसएसएल साइट के प्रदर्शन के लिए बहुत महत्व रखता है, क्योंकि बिना जीवित रखे, प्रत्येक अनुरोधित संसाधन के लिए एक एसएसएल हैंडशेक की आवश्यकता होगी।
तो, यहाँ चिंता क्लाइंट से बैकएंड सर्वर के लिए सभी तरह से एक बड़ा रख-रखाव सत्र है। यह प्रदर्शन के लिए एक महत्वपूर्ण बात है, और आधुनिक HTTP सर्वरों के लिए पाठ्यक्रम के रूप में लिया गया है, लेकिन यह पैच कहता है कि यह इसका समर्थन नहीं करता है। आइए देखें क्यों ..
एक जीवित सत्र केवल एक के बाद एक और अनुरोध हैं - एक बार जब सर्वर एक अनुरोध पर अपनी प्रतिक्रिया समाप्त करता है, तो सर्वर ने FIN
टीसीपी सत्र को समाप्त करने के लिए एक पैकेट नहीं भेजा है ; क्लाइंट केवल हेडर का एक और बैच भेज सकता है।
यह समझने के लिए कि यह पैच क्या कर रहा है, यहाँ एक जीवंत बातचीत का एक उदाहरण है:
ग्राहक:
GET / HTTP/1.1
Connection: keep-alive
Host: domain.com
...
सर्वर:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Server: Apache
Content-Length: 34
.... (other headers)
<html><head>content!</head></html>
यहां एक गैर-जीवित-जीवित कनेक्शन बंद हो जाएगा। लेकिन, रखने के लिए जिंदा ग्राहक एक और आग बंद करने की अनुमति देता है:
GET /images/some/image.on.the.page.jpg HTTP/1.1
Connection: keep-alive
Host: domain.com
...
प्रॉक्सी में क्लाइंट आईडी के लिए, X-Forwarded-For
प्रत्येक क्लाइंट रिक्वेस्ट में हेडर में कुछ रिवर्स प्रॉक्सी जोड़ सकते हैं । यह अपस्ट्रीम सर्वर को बताता है कि लॉगिंग और अन्य एप्लिकेशन जरूरतों में पवित्रता के लिए अनुरोध कहां से आ रहा है (रिवर्स प्रॉक्सी के आईपी से शुरू होने वाले प्रत्येक अनुरोध के बजाय)।
X-Forwarded-For
हैडर प्रत्येक और, रखें जिंदा कनेक्शन के माध्यम से भेजा के रूप में पूर्ण हेडर हर बार भेजा जाता है हर ग्राहक संसाधन अनुरोध में इंजेक्ट किया जाना चाहिए; X-Forwarded-For
हेडर और अनुवाद को "वास्तविक" अनुरोध के रूप में संभालना आईपी एक प्रति-अनुरोध पर किया जाता है, प्रति टीसीपी-कीप-लाइव-सेशन के आधार पर नहीं। और हे, शायद वहाँ कुछ भयानक रिवर्स प्रॉक्सी सॉफ्टवेयर है जो कई क्लाइंट से सेवा अनुरोधों के लिए एक एकल रखने-जीवित सत्र का उपयोग करता है।
यह वह जगह है जहाँ यह पैच विफल रहता है।
उस साइट का पैच स्ट्रीम में HTTP हेडर के पहले सेट के अंत में TCP सत्र के बफर को देखता है, और हेडर के उस पहले सेट के अंत के बाद नए हेडर को स्ट्रीम में इंजेक्ट करता है। ऐसा किए जाने के बाद, यह X-Forwarded-For
काम पर विचार करता है, और हेडर के नए सेट की समाप्ति के लिए स्कैन करना बंद कर देता है। इस पद्धति में भविष्य के सभी शीर्षकों के बारे में कोई जागरूकता नहीं है जो बाद के अनुरोधों के माध्यम से आ रही है।
वास्तव में उन्हें दोष नहीं दे सकते; वास्तव में अपने स्ट्रीम की सामग्री का संचालन और अनुवाद करने के लिए स्टनलाइन का निर्माण नहीं किया गया था।
आपके सिस्टम पर इसका जो प्रभाव पड़ेगा वह यह है कि पहले से रखे गए स्ट्रीम के पहले अनुरोध को X-Forwarded-For
हेडर को ठीक से इंजेक्ट किया जाएगा , और बाद के सभी अनुरोध ठीक काम करेंगे - लेकिन उनके पास हेडर नहीं होगा।
जब तक कि एक और हेडर इंजेक्शन पैच नहीं है जो प्रति कनेक्शन कई ग्राहक अनुरोधों को संभाल सकता है (या स्टैक ओवरफ्लो पर हमारे दोस्तों की मदद से इसे प्राप्त किया जा सकता है), आपको अपने एसएसएल समाप्ति के लिए अन्य विकल्पों को देखने की आवश्यकता हो सकती है।