संदर्भ6 मिनट का पठन

URL एन्कोडिंग बनाम Base64 एन्कोडिंग: क्या अंतर है?

URL एन्कोडिंग (percent-encoding) RFC 3986 के अनुसार URLs में मौजूद विशेष वर्णों को %XX फॉर्मेट में बदलती है। Base64 एन्कोडिंग RFC 4648 के अनुसार बाइनरी डेटा को 64 ASCII वर्णों का उपयोग करके एक टेक्स्ट स्ट्रिंग में बदलती है। दोनों अलग-अलग उद्देश्यों के लिए हैं और आपस में विनिमेय नहीं हैं।

URL एन्कोडिंग क्या है?

URL एन्कोडिंग, जिसे percent-encoding भी कहा जाता है, RFC 3986 द्वारा परिभाषित एक तंत्र है जो किसी URI में उन वर्णों को दर्शाने के लिए है जो अनुमत नहीं हैं या जिनका कोई विशेष अर्थ होता है। एन्कोड किए जाने वाले प्रत्येक वर्ण को एक या अधिक बाइट्स में (UTF-8 का उपयोग करके) बदला जाता है, और प्रत्येक बाइट को एक percent चिह्न (%) के बाद दो अपरकेस हेक्साडेसिमल अंकों के रूप में दर्शाया जाता है।

उदाहरण के लिए, एक स्पेस वर्ण %20 बन जाता है, एम्परसैंड %26 बन जाता है, और यूरो चिह्न जैसा कोई गैर-ASCII वर्ण %E2%82%AC बन जाता है (तीन UTF-8 बाइट्स, प्रत्येक percent-encoded)।

// JavaScript में URL एन्कोडिंग के उदाहरण
encodeURIComponent('hello world');   // "hello%20world"
encodeURIComponent('price=10&qty=2'); // "price%3D10%26qty%3D2"
encodeURIComponent('cafe');         // "caf%C3%A9"

URL एन्कोडिंग विशेष रूप से URLs को सुरक्षित और वैध बनाने के लिए डिज़ाइन की गई है। यह केवल उन्हीं वर्णों को एन्कोड करती है जो URIs में अनुमत नहीं हैं या जिनके आरक्षित अर्थ होते हैं, जबकि अल्फ़ान्यूमेरिक वर्णों और कुछ सुरक्षित चिह्नों को अछूता छोड़ देती है।

Base64 एन्कोडिंग क्या है?

Base64 एन्कोडिंग, जो RFC 4648 द्वारा परिभाषित है, एक बाइनरी-टू-टेक्स्ट एन्कोडिंग योजना है जो बाइनरी डेटा को 64 ASCII वर्णों के एक समूह का उपयोग करके दर्शाती है: A-Z, a-z, 0-9, +, और /, जिसमें = का उपयोग पैडिंग के लिए किया जाता है। इनपुट के प्रत्येक तीन बाइट्स से आउटपुट के चार वर्ण उत्पन्न होते हैं।

Base64 को बाइनरी डेटा को उन चैनलों पर प्रसारित करने के लिए डिज़ाइन किया गया था जो केवल टेक्स्ट को ही विश्वसनीय रूप से सपोर्ट करते हैं, जैसे कि ईमेल (MIME) या XML/JSON में डेटा एम्बेड करना। यह URLs के लिए विशिष्ट नहीं है और सभी इनपुट बाइट्स को एन्कोड करती है, न कि केवल विशेष वर्णों को।

// JavaScript में Base64 एन्कोडिंग के उदाहरण
btoa('hello world');         // "aGVsbG8gd29ybGQ="
btoa('price=10&qty=2');      // "cHJpY2U9MTAmcXR5PTI="

// Unicode स्ट्रिंग्स के लिए, पहले UTF-8 में एन्कोड करें
function toBase64(str) {
  return btoa(unescape(encodeURIComponent(str)));
}
toBase64('cafe');           // "Y2Fmw6k="

Base64 का एक URL-सुरक्षित प्रकार (Base64url) भी है जो + को - से और / को _ से बदल देता है, और अक्सर = पैडिंग को हटा देता है। इस प्रकार का उपयोग JWTs, URLs में data URIs, और अन्य ऐसे संदर्भों में किया जाता है जहाँ मानक Base64 वर्ण URL सिंटैक्स के साथ टकराव करेंगे।

मुख्य अंतर

विशेषता URL एन्कोडिंग Base64 एन्कोडिंग
मानक RFC 3986 RFC 4648
उद्देश्य URLs को सुरक्षित बनाना बाइनरी को टेक्स्ट के रूप में दर्शाना
एन्कोड करता है केवल विशेष/आरक्षित वर्ण सभी इनपुट बाइट्स
आउटपुट फॉर्मेट %XX हेक्स अनुक्रम A-Z, a-z, 0-9, +, /, =
आकार में वृद्धि परिवर्तनशील (केवल एन्कोड किए गए वर्ण बढ़ते हैं) हमेशा ~33% अधिक बड़ा
प्रतिवर्ती हाँ हाँ
मानव-पठनीय आंशिक रूप से (unreserved वर्ण बने रहते हैं) नहीं
डिफ़ॉल्ट रूप से URL-सुरक्षित हाँ (डिज़ाइन के अनुसार) नहीं (इसमें +, /, = होते हैं)

कब किसका उपयोग करें

URL एन्कोडिंग का उपयोग करें जब आपको किसी URL में विशेष वर्ण शामिल करने की आवश्यकता हो, जैसे कि query parameter मान, path segments, या fragment identifiers। जब भी डेटा को किसी URL संरचना के भीतर एम्बेड करना हो, तो URL एन्कोडिंग ही सही विकल्प है।

Base64 एन्कोडिंग का उपयोग करें जब आपको बाइनरी डेटा (छवियाँ, फ़ाइलें, एन्क्रिप्टेड पेलोड) को टेक्स्ट के रूप में दर्शाना हो, JSON या XML में बाइनरी सामग्री एम्बेड करनी हो, या केवल-टेक्स्ट चैनलों के माध्यम से डेटा प्रसारित करना हो। Base64 का उपयोग HTTP Basic Authentication हेडर्स और JSON Web Tokens (JWTs) में भी किया जाता है।

// URL एन्कोडिंग: किसी URL में एक search term एम्बेड करना
const searchUrl = 'https://example.com/search?q=' +
  encodeURIComponent('C++ & Java');
// "https://example.com/search?q=C%2B%2B%20%26%20Java"

// Base64: CSS या HTML में एक छवि एम्बेड करना
const imageData = 'data:image/png;base64,iVBORw0KGgoAAAANS...';

// Base64: HTTP Basic Auth हेडर
const credentials = btoa('username:password');
const header = 'Authorization: Basic ' + credentials;

क्या आप इन्हें संयोजित कर सकते हैं?

हाँ, और कुछ मामलों में आपको ऐसा करना ही पड़ता है। यदि आपको Base64-एन्कोडेड डेटा को एक URL parameter के रूप में पास करना है, तो मानक Base64 आउटपुट में +, /, और = वर्ण हो सकते हैं, जिनके URLs में विशेष अर्थ होते हैं। आपके पास दो विकल्प हैं:

विकल्प 1: URL में रखने से पहले Base64 स्ट्रिंग को URL-एन्कोड करें। + %2B बन जाता है, / %2F बन जाता है, और = %3D बन जाता है।

विकल्प 2: Base64url प्रकार (RFC 4648 Section 5) का उपयोग करें, जो + को - से, / को _ से बदल देता है और पैडिंग हटा देता है। यही तरीका JWTs और कई आधुनिक APIs द्वारा उपयोग किया जाता है।

// विकल्प 1: मानक Base64 को URL-एन्कोड करना
const base64 = btoa('binary data here'); // "YmluYXJ5IGRhdGEgaGVyZQ=="
const urlSafe = encodeURIComponent(base64);
// "YmluYXJ5IGRhdGEgaGVyZQ%3D%3D"

// विकल्प 2: Base64url एन्कोडिंग
function toBase64url(str) {
  return btoa(str)
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
}
toBase64url('binary data here');
// "YmluYXJ5IGRhdGEgaGVyZQ"

संबंधित लेख

हमारे मुफ़्त टूल आज़माएँ