प्रॉम्प्ट और लागू संदर्भ
एक Service Worker को केवल same-origin इमेज और डॉक्यूमेंट रूट्स को इंटरसेप्ट करना चाहिए और tenant तथा resource IDs को एक्सट्रैक्ट करना चाहिए। कंपोनेंट बाउंड्रीज, ग्रुप्स, केस रूल्स, और अनसपोर्टेड-ब्राउज़र फॉलबैक को कवर करते हुए एक URLPattern मैचर डिज़ाइन करें।
URLPattern प्रोटोकॉल, होस्ट, पोर्ट, pathname, search, और hash कंपोनेंट्स के लिए नेम्ड या नंबर्ड कैप्चर ग्रुप्स के साथ एक मानकीकृत URL पैटर्न मैचर है। यह रूटिंग, Service Worker कैशिंग, और एज रूल्स के लिए उपयोगी है, लेकिन कोई मैच ऑथराइजेशन नहीं होता है और यह नॉर्मलाइजेशन या एक्सेस चेक्स की जगह नहीं लेता है।
इंटरव्यूअर क्या मूल्यांकन करता है
पूरी स्ट्रिंग की मैचिंग के बजाय कंपोनेंट मैचिंग, वाइल्डकार्ड और ग्रुप सिंटैक्स, रिलेटिव पैटर्न्स के लिए baseURL, कंपोनेंट-वार केस व्यवहार, कैप्चर्स की ट्रस्ट बाउंड्री, कंपाइल विफलताएं, और क्रॉस-ब्राउज़र कम्पैटिबिलिटी को कवर करें।
स्पष्टीकरण वाले प्रश्न
अनुमति प्राप्त प्रोटोकॉल, होस्ट, और पोर्ट्स की पुष्टि करें; क्या पाथ केस-सेंसिटिव हैं; क्या सर्च पैरामीटर्स भाग लेते हैं; और क्या tenant और resource IDs पूर्ण होने चाहिए। पेज, Service Worker, या Worker संदर्भ, ब्राउज़र सपोर्ट, और क्या कोई मैच कैशिंग या सुरक्षा निर्णयों को प्रभावित करता है, इसकी भी पुष्टि करें।
30-सेकंड उत्तर फ्रेमवर्क
“मैं प्रोटोकॉल, होस्ट, और पोर्ट कंपोनेंट्स को फिक्स करूंगा, पाथ में केवल नेम्ड ग्रुप्स का उपयोग करूंगा, और रिलेटिव पैटर्न्स के लिए एक स्पष्ट baseURL सेट करूंगा। कंपाइल-टाइम कंस्ट्रक्शन सिंटैक्स त्रुटियों को पकड़ता है; रनटाइम पर मैं पूर्ण URL का मिलान करूंगा, same-origin लागू करूंगा, फिर रूटिंग या कैश कीज के लिए कैप्चर्स का उपयोग करूंगा। URLPattern मैचिंग प्रदान करता है, ऑथराइजेशन नहीं। अनसपोर्टेड ब्राउज़र्स को एक सीमित URL-कंपोनेंट फॉलबैक मिलता है जो उन्हीं टेस्ट्स द्वारा कवर होता है, न कि एक व्यापक regex जो URL सिमेंटिक्स को फिर से लागू करता है।”
चरण-दर-चरण विस्तृत विश्लेषण
चरण 1: कंपोनेंट-अवेयर पैटर्न बनाएं
URLPattern protocol, hostname, port, pathname, search, और hash वाली एक ऑब्जेक्ट, या एक URL-स्टाइल स्ट्रिंग स्वीकार करता है। सुरक्षा-संवेदनशील रूट्स को केवल किसी ऐसे ओरिजिन को स्वीकार करने के बजाय जो केवल एक पाथ साझा करता है, प्रोटोकॉल और होस्ट को फिक्स करना चाहिए।
चरण 2: नेम्ड कैप्चर ग्रुप्स का उपयोग करें
नेम्ड पाथ ग्रुप्स को exec() परिणाम से पढ़ा जा सकता है और tenant तथा resource फील्ड्स में मैप किया जा सकता है। एक कैप्चर केवल यह साबित करता है कि स्ट्रिंग का अपेक्षित आकार है; इसके कैरेक्टर सेट, लंबाई, और व्यावसायिक अस्तित्व को अलग से मान्य करें।
const assetPattern = new URLPattern({
protocol: "https",
hostname: "cdn.example.com",
pathname: "/tenant/:tenantId/assets/:assetId.:ext",
});
const match = assetPattern.exec(request.url);
const assetId = match?.pathname.groups.assetId;चरण 3: वाइल्डकार्ड और सेपरेटर बाउंड्रीज को परिभाषित करें
एक वाइल्डकार्ड अपने कंपोनेंट के भीतर वर्णों से मेल खाता है; यह न मानें कि यह स्वचालित रूप से पाथ सेपरेटर्स को पार करता है या सर्च पैरामीटर्स को कवर करता है। प्रत्येक पदानुक्रम स्तर को स्पष्ट रूप से लिखें और रिक्त मानों, अतिरिक्त स्लैश, और एन्कोडेड वर्णों का परीक्षण करें।
चरण 4: baseURL और रिलेटिव पैटर्न्स को समझें
रिलेटिव पैटर्न को प्रोटोकॉल, होस्ट, और अन्य कंपोनेंट्स को हल करने के लिए एक baseURL की आवश्यकता होती है। इसलिए विभिन्न वातावरण अलग-अलग मैचर्स उत्पन्न कर सकते हैं। कंस्ट्रक्शन के समय बेस को फिक्स करें और डेवलपमेंट, प्रीव्यू, और प्रोडक्शन डोमेन का परीक्षण करें।
चरण 5: केस और नॉर्मलाइजेशन रूल्स को संभालें
URL कंपोनेंट्स के अलग-अलग केस रूल्स होते हैं। होस्टनेम आमतौर पर केस-इंसेंसिटिव होते हैं, जबकि पाथ और अन्य कंपोनेंट्स केस-सेंसिटिव हो सकते हैं। मैचिंग से पहले पूरे URL को लोअरकेस न करें क्योंकि यह रिसोर्स पाथ या सिग्नेचर इनपुट को बदल सकता है।
चरण 6: मैचिंग को ऑथराइजेशन से अलग करें
URLPattern यह साबित नहीं करता है कि कोई tenant उपयोगकर्ता से संबंधित है या कोई रिसोर्स पढ़ने योग्य है। मैचिंग के बाद, ओरिजिन, ऑथेंटिकेशन, ऑथराइजेशन, कैश आइसोलेशन, और रिस्पॉन्स टाइप चेक्स लागू करें। एक कैप्चर किया गया tenant ID अविश्वसनीय इनपुट बना रहता है।
चरण 7: कंपाइल त्रुटियां और रनटाइम लागत
पैटर्न कंस्ट्रक्शन के दौरान पार्स होते हैं, इसलिए अमान्य सिंटैक्स पहले अनुरोध के बजाय स्टार्टअप या रजिस्ट्रेशन के दौरान विफल होना चाहिए। प्रति अनुरोध एक निर्माण करने के बजाय संकलित इंस्टेंसेस का पुन: उपयोग करें, और हॉट पाथ्स पर वास्तविक URL वितरण के विरुद्ध मैचिंग लागत को मापें।
चरण 8: कम्पैटिबिलिटी फॉलबैक डिज़ाइन करें
एक असमर्थित वातावरण new URL() का उपयोग कर सकता है और केवल उन्हीं कंपोनेंट्स की जांच कर सकता है जिनकी व्यवसाय को आवश्यकता है। प्रोटोकॉल, होस्ट, एन्कोडिंग, और सर्च पार्सिंग को पुन: प्रस्तुत करने के लिए एक व्यापक regex का उपयोग न करें। फॉलबैक को मूल मैचर के टेस्ट वैक्टर साझा करने चाहिए।
उच्च-गुणवत्ता वाला नमूना उत्तर
मैं निश्चित https, एक निश्चित CDN होस्ट, और स्पष्ट पाथ कंपोनेंट्स के साथ एक URLPattern का निर्माण करूंगा, जिसमें tenant और resource IDs के लिए नेम्ड ग्रुप्स का उपयोग किया जाएगा। एक Service Worker पूर्ण URL का मिलान करेगा, फिर same-origin, ऑथेंटिकेशन, और कैश पार्टिशनिंग लागू करेगा; कैप्चर्स अविश्वसनीय स्ट्रिंग्स बने रहते हैं और उन्हें अभी भी लंबाई, कैरेक्टर-सेट, और ऑथराइजेशन चेक्स की आवश्यकता होती है। पैटर्न को एक बार बनाएं और सिंटैक्स त्रुटियों पर तुरंत विफल हों। baseURL को डिप्लॉयमेंट डोमेन पर फिक्स करें और केस के अंतर, एन्कोडेड स्लैश, अतिरिक्त सर्च पैरामीटर, और प्रत्येक वातावरण का परीक्षण करें। पुराने ब्राउज़र सीमित URL कंपोनेंट फॉलबैक का उपयोग करते हैं, कभी भी ऐसे व्यापक regex का नहीं जो पूर्ण URL सिमेंटिक्स को पुन: प्रस्तुत करने का दावा करता हो।
सामान्य गलतियां
केवल pathname का मिलान करना और same-origin मान लेना
कोई भी प्रोटोकॉल या होस्ट समान पाथ पास कर सकता है। एक सुरक्षा-संवेदनशील मैचर को ओरिजिन कंपोनेंट्स को फिक्स करना चाहिए और रनटाइम पर रिक्वेस्ट ओरिजिन की पुन: जांच करनी चाहिए।
कैप्चर्स को मान्य आईडी के रूप में मानना
कैप्चर केवल आकार साबित करते हैं। कैरेक्टर सेट, लंबाई, tenant ओनरशिप, रिसोर्स की उपस्थिति, और ऑथराइजेशन को मान्य करें।
प्रत्येक URL को लोअरकेस या regex-नॉर्मलाइज़ करना
कंपोनेंट केस और एन्कोडिंग सिमेंटिक्स भिन्न होते हैं। पूरी स्ट्रिंग को लोअरकेस करने से पाथ और सिग्नेचर टूट सकते हैं, जबकि एक व्यापक regex सेपरेटर्स को पार कर सकता है या सर्च रूल्स को मिस कर सकता है।
फॉलो-अप प्रश्न और उत्तर
आप डेवलपमेंट baseURL को प्रोडक्शन तक पहुंचने से कैसे रोकते हैं?
baseURL को डिप्लॉयमेंट कॉन्फ़िगरेशन के रूप में इंजेक्ट करें, स्टार्टअप पर अनुमत प्रोटोकॉल और होस्ट को मान्य करें, और बिल्ड तथा एंड-टू-एंड टेस्ट्स में प्रोडक्शन डोमेन को फिक्स करें। उपयोगकर्ता-नियंत्रित URL से सुरक्षा मैचर बेस कभी न प्राप्त करें।
आप एक वैकल्पिक फ़ाइल एक्सटेंशन का समर्थन कैसे करेंगे?
पैटर्न सिंटैक्स के वैकल्पिक ग्रुप का उपयोग करें और एक्सटेंशन, कोई एक्सटेंशन नहीं, अतिरिक्त डॉट्स, और एन्कोडेड वर्णों का अलग से परीक्षण करें। जब कैप्चर अनुपस्थित हो, तो एक स्पष्ट कंटेंट टाइप और कैश पॉलिसी चुनें।
URLPattern एक रूटिंग लाइब्रेरी के साथ कैसे सह-अस्तित्व में रह सकता है?
URLPattern को तेज़ एज या Service Worker फ़िल्टरिंग करने दें, और एप्लिकेशन राउटर को पूर्ण नेविगेशन और पैरामीटर सत्यापन करने दें। URL कॉन्ट्रैक्ट टेस्ट्स साझा करें ताकि दोनों परतें एक रूट की समान रूप से व्याख्या करें।