प्रतिनिधि इंटरव्यू विषय

बैकएंड इंटरव्यू: आप ऑप्टिमिस्टिक HTTP/1.1 प्रोटोकॉल अपग्रेड को कैसे सुरक्षित करेंगे?

बैकएंडकठिन
Offer.cc संपादकीय टीमप्रकाशित अपडेट किया गया

प्रश्न

लेटेंसी कम करने के लिए आपका प्रॉक्सी HTTP/1.1 प्रोटोकॉल स्विच की पुष्टि होने से पहले पोस्ट-अपग्रेड डेटा भेजना चाहता है। जोखिमों, सुरक्षित सीमाओं और क्लाइंट तथा प्रॉक्सी में आवश्यक परिवर्तनों की व्याख्या करें।

प्रॉम्प्ट और दायरा

लेटेंसी कम करने के लिए आपका प्रॉक्सी HTTP/1.1 प्रोटोकॉल स्विच की पुष्टि होने से पहले पोस्ट-अपग्रेड डेटा भेजना चाहता है। जोखिमों, सुरक्षित सीमाओं और क्लाइंट तथा प्रॉक्सी में आवश्यक परिवर्तनों की व्याख्या करें।

इंटरव्यूअर क्या मूल्यांकन करता है

  • यह जानना कि HTTP/1.1 अपग्रेड की पुष्टि से पहले भी उसे अस्वीकार किया जा सकता है, इसलिए पिछली सफलता कोई गारंटी नहीं है।
  • यह समझाना कि रिजेक्शन पाथ पर अटैकर-नियंत्रित बाइट्स को HTTP रिक्वेस्ट के रूप में कैसे पुनः व्याख्यायित किया जा सकता है।
  • Upgrade, CONNECT, WebSocket, और HTTP/2/3 बाधाओं में अंतर करना।
  • 2xx की प्रतीक्षा करना, कनेक्शन बंद करना, ऑप्टिमिस्टिक सेंड्स को अक्षम करना, और ऑब्ज़र्वेबल फ़ॉलबैक जैसे इंजीनियरिंग नियंत्रण प्रदान करना।

स्पष्टीकरण हेतु प्रश्न

  1. क्या तंत्र Upgrade है या CONNECT, और इसमें कौन सा टारगेट प्रोटोकॉल और HTTP संस्करण शामिल हैं?
  2. क्या कोई अविश्वसनीय एप्लिकेशन, उपयोगकर्ता, या तृतीय-पक्ष ओरिजिन बाद के बाइट्स को नियंत्रित कर सकता है?
  3. क्या कनेक्शन में क्लाइंट सर्टिफिकेट, प्रॉक्सी ऑथेंटिकेशन, या अन्य कनेक्शन-स्तरीय ट्रस्ट शामिल हैं?
  4. क्या लक्ष्य हैंडशेक लेटेंसी है, या HTTP/1.1 कम्पैटिबिलिटी और कनेक्शन पुनः उपयोग बना रहना चाहिए?

30-सेकंड उत्तर रूपरेखा

मैं डिफ़ॉल्ट रूप से पुष्टि से पहले HTTP/1.1 पर अविश्वसनीय पोस्ट-अपग्रेड डेटा को प्रतिबंधित करूँगा। क्लाइंट अपग्रेड रिस्पॉन्स की प्रतीक्षा करता है; एक CONNECT प्रॉक्सी 2xx की प्रतीक्षा करता है या Connection: close भेजता है और विफलता के बाद कनेक्शन बंद कर देता है। अज्ञात-प्रोटोकॉल बाइट्स वाले अस्वीकृत कनेक्शन का पुन: उपयोग नहीं किया जाता है। उनके मल्टीप्लेक्स्ड स्ट्रीम सिमेंटिक्स के लिए HTTP/2/3 को अलग से सत्यापित करें, अपग्रेड और फ़ॉलबैक के कारणों को रिकॉर्ड करें, और एक नियंत्रित प्रॉक्सी में रिक्वेस्ट स्मगलिंग और पार्सर असहमति का परीक्षण करें।

चरण-दर-चरण गहन विश्लेषण

1. ऑप्टिमिस्टिक-सेंड की धारणा को पहचानें

HTTP/1.1 Upgrade या CONNECT के साथ प्रोटोकॉल स्विच कर सकता है, लेकिन सर्वर रिक्वेस्ट को अस्वीकार कर सकता है। यदि क्लाइंट स्टेटस देखने से पहले नए-प्रोटोकॉल बाइट्स भेजता है, तो दो पार्सर संभव हैं: यदि स्वीकार किया जाता है तो नया प्रोटोकॉल, यदि अस्वीकार किया जाता है तो HTTP/1.1। पिछला सफल अपग्रेड यह साबित नहीं करता है कि अगला भी स्वीकार किया जाएगा।

2. रिक्वेस्ट-स्मगलिंग पाथ की व्याख्या करें

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

3. एक सुरक्षित कार्यान्वयन चुनें

सबसे सुरक्षित तरीका बाद का डेटा भेजने से पहले पुष्टि की प्रतीक्षा करना है। RFC 9931 के अनुसार HTTP/1.1 CONNECT प्रॉक्सी क्लाइंट को 2xx की प्रतीक्षा करनी चाहिए या Connection: close भेजना चाहिए; किसी असुरक्षित CONNECT को अस्वीकार करते समय प्रॉक्सी को अंतर्निहित कनेक्शन को बंद कर देना चाहिए। यदि लेटेंसी मायने रखती है, तो स्पष्ट स्ट्रीम सिमेंटिक्स वाले HTTP/2 या उसके बाद के संस्करणों को प्राथमिकता दें और टारगेट प्रोटोकॉल के अपने हैंडशेक नियमों को सत्यापित करें।

4. फ़ॉलबैक, मॉनिटरिंग और परीक्षण बनाएं

अपग्रेड विफलता पर, कनेक्शन को गैर-पुन: प्रयोज्य (non-reusable) के रूप में चिह्नित करें और एक नया HTTP/1.1 रिक्वेस्ट बनाएं; पहले से भेजे गए अज्ञात बाइट्स को कभी भी पुन: प्रयास योग्य रिक्वेस्ट डेटा न मानें। क्रेडेंशियल्स या बॉडीज को लॉग किए बिना स्वीकृति, अस्वीकृति कारणों, क्लोज़ और पुन: प्रयासों को मापें। अविश्वसनीय पेलोड, ऑथेंटिकेटेड प्रॉक्सी, 401/407, रीडायरेक्ट, टाइमआउट, पार्सर असहमति और HTTP/2/3 फ़ॉलबैक का परीक्षण करें।

उच्च-गुणवत्ता वाला नमूना उत्तर

मैं ऑप्टिमिस्टिक सेंडिंग को एक सामान्य ऑप्टिमाइज़ेशन के रूप में नहीं मानूँगा। HTTP/1.1 Upgrade या CONNECT को पुष्टि से पहले अस्वीकार किया जा सकता है; अटैकर-नियंत्रित बाद के बाइट्स को अतिरिक्त रिक्वेस्ट के रूप में पार्स किया जा सकता है, जिससे रिक्वेस्ट स्मगलिंग पैदा होती है, और कनेक्शन-स्तरीय ऑथेंटिकेशन इसके प्रभाव को बढ़ा देता है। मैं डिफ़ॉल्ट रूप से पुष्टि की प्रतीक्षा करूँगा। एक CONNECT प्रॉक्सी 2xx की प्रतीक्षा करता है या Connection: close का उपयोग करता है और अस्वीकृति के बाद बंद हो जाता है; एक विफल Upgrade का पुन: उपयोग नहीं किया जाता है। कम लेटेंसी के लिए, HTTP/2/3 स्ट्रीम सिमेंटिक्स का मूल्यांकन करें। अविश्वसनीय पेलोड, ऑथेंटिकेटेड प्रॉक्सी, त्रुटि स्टेटस, रीडायरेक्ट और पुन: प्रयासों के साथ सत्यापित करें; स्वीकृति और बंद होने के कारणों की निगरानी करें; सुनिश्चित करें कि फ़ॉलबैक कभी भी रिक्वेस्ट या क्रेडेंशियल्स लीक न करे।

सामान्य गलतियाँ

  • केवल इसलिए मनमाना बाद का डेटा भेजना क्योंकि हाल ही का अपग्रेड सफल रहा था।
  • केवल सर्वर को सत्यापित करना और क्लाइंट, प्रॉक्सी तथा तृतीय-पक्ष पार्सिंग सीमाओं की उपेक्षा करना।
  • अस्वीकृत CONNECT कनेक्शन का पुन: उपयोग करना या बफ़र किए गए पेलोड डेटा को आगे भेजना।
  • प्रत्येक Upgrade टोकन पर WebSocket हैंडशेक नियमों को लागू करना।
  • HTTP/2/3 स्ट्रीम सिमेंटिक्स में अंतर किए बिना केवल HTTP/1.1 की बेंचमार्किंग करना।
  • अज्ञात बाइट्स वाले कनेक्शन के साथ पुनः प्रयास करना या डायग्नोस्टिक लॉग में बॉडीज लिखना।

अनुवर्ती प्रश्न और उत्तर

Connection: close जोखिम को कैसे कम करता है?

यह रिक्वेस्ट को संभालने के बाद कनेक्शन को बंद कर देता है, इसलिए एक अस्वीकृत अपग्रेड उस कनेक्शन पर संभावित रूप से मिश्रित बाद के बाइट्स को पार्स करना जारी नहीं रखता है। यह पुन: उपयोग का त्याग करता है और 2xx की प्रतीक्षा करने के मुकाबले इसका मूल्यांकन किया जाना चाहिए।

क्या WebSocket ऑप्टिमिस्टिक रूप से डेटा भेज सकता है?

WebSocket के हैंडशेक के लिए आवश्यक है कि बाद का डेटा भेजने से पहले क्लाइंट सर्वर रिस्पॉन्स की प्रतीक्षा करे। किसी एक प्रोटोकॉल के नियमों को प्रत्येक Upgrade टोकन के लिए सामान्यीकृत नहीं किया जाना चाहिए।

आप लेटेंसी और सुरक्षा के बीच संतुलन कैसे बनाते हैं?

प्रतीक्षा करने की वास्तविक लागत को मापें, फिर HTTP/2 या HTTP/3 को प्राथमिकता दें। यदि HTTP/1.1 की आवश्यकता है, तो पुष्टि की प्रतीक्षा करें और फ़ॉलबैक पर कनेक्शन बंद करें। कोई भी ऑप्टिमाइज़ेशन अविश्वसनीय डेटा को किसी अपुष्ट पार्सिंग सीमा को पार करने की अनुमति नहीं दे सकता है।

सार्वजनिक स्रोत

संबंधित प्रश्न