ज़्यादा एचटीटीपी अनुरोध के हेडर जोड़ना

Pavol Drotar
Pavol Drotar

एचटीटीपी अनुरोधों में उपयोगकर्ता-एजेंट या कॉन्टेंट-टाइप जैसे हेडर होते हैं. इनके ज़रिए अटैच किए गए हेडर के अलावा ब्राउज़र, Android ऐप्लिकेशन EXTRA_HEADERS इंटेंट ज़्यादा. सुरक्षा की वजहों से, Chrome कुछ अतिरिक्त हेडर को फ़िल्टर कर देता है इंटेंट को कैसे और कहां लॉन्च किया गया है.

क्रॉस-ऑरिजिन अनुरोधों के लिए सुरक्षा की ��क ��तिरिक्त �������� क��� ��़रूरत होती है, क्योंकि क्लाइंट और सर्वर मालिकाना हक उसी पक्ष का न हो. इस गाइड में, Chrome की मदद से ऐसे अनुरोधों को लॉन्च करने के बारे में जानकारी दी गई है कस्टम टैब, यानी कि ऐसे ऐप्लिकेशन से लॉन्च किए गए इंटेंट जो ब्राउज़र टैब में यूआरएल खोलते हैं. Chrome तक वर्शन 83 है, तो डेवलपर कस्टम टैब लॉन्च करते समय कोई भी हेडर जोड़ सकते हैं. वर्शन 83 और उसके बाद के वर्शन में, Chrome मंज़ूरी दिए गए क्रॉस-ऑरिजिन हेडर को छोड़कर, बाकी सभी को फ़िल्टर करना शुरू कर दिया गया है, क्योंकि अनुमति नहीं दिए गए हेडर सुरक्षा को खतरा है. Chrome 86 और इसके बाद के वर्शन में, ऐसे हेडर अटैच किए जा सकते हैं जिन्हें अनुमति नहीं मिली है क्रॉस-ऑरिजिन अनुरोध, जब सर्वर और क्लाइंट एक-दूसरे से जुड़े होते हैं. इसके लिए, डिजिटल ऐसेट लिंक का इस्तेमाल किया जाता है. इस व्यवहार की खास जानकारी नीचे दी गई टेबल में दी गई है:

Chrome का वर्शन सीओआरएस हेडर की अनुमति है
Chrome 83 से पहले मंज़ूरी पा चुके, स्वीकार नहीं किए गए
Chrome 83 से Chrome 85 तक मंज़ूरी पा चुके
Chrome 86 और उसके बाद के वर्शन में डिजिटल ऐसेट लिंक सेट अप होने पर, मंज़ूरी वाली सूची में शामिल, स्वीकार नहीं किया गया

टेबल 1.: जिन सीओआरएस हेडर को मंज़ूरी नहीं मिली है उन्हें फ़िल्टर करना.

इस लेख में, सर्वर और क्लाइंट के बीच पुष्टि किए गए कनेक्शन को सेट अप करने और उसका इस्तेमाल करने का तरीका बताया गया है अनुमति वाली सूची में शामिल ��र स्वीकार नहीं किए गए, एचटीटीपी हेडर भेजने के लिए. आप सीधे पर जा सकते हैं कोड के लिए, कस्टम टैब इंटेंट में और हेडर जोड़ना.

बैकग्राउंड

मंज़ूरी पा चुके सीओआरएस रिक्वेस्ट हेडर के मुकाबले उन सीओआरएस के अनुरोधों का हेडर जिन्हें अनुमति मिली है

क्रॉस-ऑरिजिन रिसॉर्स शेयरिंग (सीओआरएस), किसी वेब ऐप्लिकेशन को एक ऑरिजिन से अनुरोध करने की अनुमति देती है एक अलग ऑरिजिन के हैं. सीओआरएस की मंज़ूरी वाले हेडर की सूची, एचटीएमएल स्टैंडर्ड. अनुमति वाली सूची में शामिल हेडर के उदाहरण, अगली टेबल में दिखाए गए हैं:

हेडर जानकारी
accept-language ऐसी सामान्य भाषाओं के विज्ञापन दिखाता है जिन्हें क्लाइंट समझता है
content-language वर्तमान ऑडियंस के लिए लक्षित भाषा का वर्णन करता है
कॉन्टेंट का टाइप संसाधन के मीडिया प्रकार को दिखाता है

टेबल 2.: अनुमति वाले सीओआरएस हेडर का उदाहरण.

अनुमति वाली सूची में शामिल हेडर सुरक्षित माने जाते हैं, क्योंकि इनमें कोई संवेदनशील जानकारी नहीं होती उपयोगकर्ता की जानकारी का इस्तेमाल करता है और इस बात की संभावना नहीं है कि सर्वर नुकसान पहुंचाने वाले काम करेगा.

जिन हेडर को मंज़ूरी नहीं मिली है उनके उदाहरण यहां दी गई टेबल में दिए गए हैं:

हेडर जानकारी
bearer-token सर्वर पर क्लाइंट की पुष्टि करता है
origin अनुरोध की शुरुआत की जगह दिखाता है
कुकी इसमें सर्वर द्वारा सेट की गई कुकी शामिल हैं

तीसरी टेबल.: ऐसे सीओआरएस हेडर का उदाहरण जिन्हें मंज़ूरी नहीं मिली है.

एचटीएमएल स्टैंडर्ड और सर्वर से, सीओआरएस अनुरोधों के लिए स्वीकार नहीं किए गए हेडर अटैच करने की सलाह नहीं दी जाती है मान लेते हैं कि क्रॉस-ऑरिजिन अनुरोधों में सिर्फ़ अनुमति वाली सूची में शामिल हेडर हैं. अनुमति नहीं दिए गए हेडर भेजना से ��ुकसान पहुंचाने वाले तीसरे पक्ष के ऐप्लिकेशन, ऐसे हेडर तैयार कर सकते हैं जो उपयोगकर्ता का गलत इस्तेमाल करते हैं ऐसी कुकी जिन्हें Chrome (या कोई दूसरा ब्राउज़र) सेव करता है और अनुरोधों में अटैच कर देता है. कुकी यह कर सकती थीं नुकसान पहुंचाने वाले सर्वर के ट्रांज़ैक्शन की पुष्टि करें. ऐसा करना आम तौर पर मुमकिन नहीं होता.

कस्टम टैब से जुड़े अनुरोधों में, सीओआरएस से अनुमति पा चुके हेडर अटैच करना

कस्टम टैब, कस्टमाइज़ किए गए ब्राउज़र टैब में वेब पेजों को लॉन्च करने का एक खास तरीका हैं. कस्टम टैब इंटेंट, CustomTabsIntent.Builder() का इस्तेमाल करके बनाए जा सकते हैं. आप इनमें हेडर भी अटैच कर सकते हैं इंटेंट, Browser.EXTRA_HEADERS फ़्लैग के साथ Bundle का इस्तेमाल करते हैं:

CustomTabsIntent intent = new CustomTabsIntent.Builder(session).build();

Bundle headers = new Bundle();
headers.putString("bearer-token", "Some token");
headers.putString("redirect-url", "Some redirect url");   
intent.intent.putExtra(Browser.EXTRA_HEADERS, headers);

intent.launchUrl(Activity.this, Uri.parse("http://www.google.com"));

हम अनुमति वाली सूची में शामिल हेडर, कस्टम टैब के सीओआरएस अनुरोधों में कभी भी अटैच कर सकते हैं. हालांकि, Chrome फ़िल्टर हेडर, जिन्हें डिफ़ॉल्ट रूप से अनुमति नहीं मिलती है. हालांकि, अन्य ब्राउज़र के काम करने का तरीका अलग हो सकता है, लेकिन डेवलपर को यह उम्मीद करनी चाहिए कि अनुमति नहीं दिए गए हेडर, सामान्य तौर पर ब्लॉक किए जाएंगे.

कस्टम टैब में गैर-अनुमोदित हेडर शामिल करने का समर्थित तरीका पहले क्रॉस-ऑरिजिन कनेक्शन, जो डिजिटल ऐक्सेस लिंक का इस्तेमाल करता है. अगले सेक्शन में, इन रणनीतियों को सेट करने का तरीका बताया गया है अप और ज़रूरी हेडर के साथ कस्टम टैब इंटेंट लॉन्च करें.

कस्टम टैब इंटेंट में ज़्यादा हेडर जोड़ना

अनुमति नहीं दिए गए हेडर को कस्टम टैब इंटे��ट से पास करने की अनुमति ��ेने के लिए, यह सेट करना ज़रूरी है Android और वेब ऐप्लिकेशन के बीच एक डिजिटल ऐसेट लिंक बना देगा, जो पुष्टि करेगा कि लेखक दोनों ऐप्लिकेशन का स्वामी है.

डिजिटल ऐसेट लिंक सेट अप करने के लिए, आधिकारिक गाइड पढ़ें. लिंक रिलेशन का इस्तेमाल करने के लिए "delegate_permission/common.use_as_origin"` से पता चलता है कि दोनों ऐप्लिकेशन एक ही से जुड़े हैं लिंक की पुष्टि होने के बाद ऑरिजिन.

ज़्यादा हेडर की मदद से कस्टम टैब इंटेंट बनाएं

कस्टम टैब इंटेंट बनाने के कई तरीके हैं. उपलब्ध बिल्डर का इस्तेमाल किया जा सकता है androidX में बिल्ड डिपेंडेंसी में लाइब्रेरी जोड़कर:

MULTI_LINE_CODE_PLACEHOLDER_1

इंटेंट बनाएं और अतिरिक्त हेडर जोड़ें:

MULTI_LINE_CODE_PLACEHOLDER_2

कस्टम टैब कनेक्शन का इस्तेमाल, ऐप्लिकेशन औरCustomTabsSession Chrome टैब. हमें इस बात की पुष्टि करने के लिए सेशन की ज़रूरत है कि ऐप्लिकेशन और वेब ऐप्लिकेशन एक ही ऑरिजिन से हैं. पुष्टि की प्रक्रिया सिर्फ़ तब पूरी होती है, जब डिजिटल ऐसेट के लिंक सही तरीके से सेट अप किए गए हों.

CustomTabsClient.warmup() को कॉल करने के लिए सलाह दी जाती है. इससे ब्राउज़र ऐप्लिकेशन ये काम कर सकता है: को बैकग्राउंड में पहले से शुरू करना होगा और यूआरएल खोलने की प्रोसेस को तेज़ करना होगा.

MULTI_LINE_CODE_PLACEHOLDER_3

ऐसा कॉलबैक सेट अप करें जो पुष्टि के बाद इंटेंट को लॉन्च करता है

CustomTabsCallback को सेशन में पास किया गया. हमने पहले बनाए गए CustomTabsIntent को लॉन्च करने के लिए onRelationshipValidationResult() एक बार ऑरिजिन की पुष्टि हो जाने पर.

MULTI_LINE_CODE_PLACEHOLDER_4

कस्टम टैब सर्विस कनेक्शन को बाइंड करें

सेवा को बाइंड करने से सेवा और कनेक्शन का onCustomTabsServiceConnected() लॉन्च हो जाता है को कॉल किया जाएगा. सेवा को उचित रूप से बाइंड करना न भूलें. बाइंडिंग और अनबाइंडिंग आम तौर पर, onStart() और onStop() गतिविधि की लाइफ़साइकल वाले तरीकों में किया जाता है.

// Bind the custom tabs service connection.
// Call this in onStart()
CustomTabsClient.bindCustomTabsService(this,
    CustomTabsClient.getPackageName(MainActivity.this, null), connection);

// …
// Unbind the custom tabs service.
// Call this in onStop().
unbindService(connection);

डेमो ऐप्लिकेशन कोड

आपको कस्टम टैब सेवा के बारे में ज़्यादा जानकारी यहां मिल सकती है. ज़्यादा जानकारी के लिए, android-browser-helper, काम करने वाले उदाहरण ऐप्लिकेशन के लिए GitHub रिपॉज़िटरी.

खास जानकारी

इस गाइड में, कस्टम टैब के सीओआरएस अनुरोधों में आर्बिट्रेरी हेडर जोड़ने का तरीका बताया गया है. अनुमति वाली सूची में शामिल हेडर, हर कस्टम टैब के सीओआरएस अनुरोध के साथ अटैच किए जा सकते हैं. वे हेडर जिन्हें मंज़ूरी नहीं मिली है आम तौर पर, सीओआरएस के अनुरोधों में इसे असुरक्षित माना जाता है और Chrome उन्हें डिफ़ॉल्ट रूप से फ़िल्टर कर देता है. उन्हें अटैच किया जा रहा है का इस्तेमाल सिर्फ़ एक ही ऑरिजिन के क्लाइंट और सर्वर के लिए किया जा सकता है. इनकी पुष्टि डिजिटल ऐसेट लिंक से की जाती है.