HTTP रेंज रिक्वेस्ट

7 min

language: ja bn en es hi pt ru zh-cn zh-tw

नमस्ते, मैं अक्षम हूँ।
मैं हमेशा से सोचता था कि HTTP Get रिक्वेस्ट हर बार पूरे पेज को प्राप्त करती है, और यह बिल्कुल भी पर्यावरण के अनुकूल नहीं है।
आखिरकार, यदि आप केवल आवश्यक जानकारी प्राप्त करना चाहते हैं, उदाहरण के लिए,

<head>
के अंदर की जानकारी, तो केवल एक हिस्सा प्राप्त करें, अन्यथा पूरा प्राप्त करें और उसे निकालें।
यदि ऐसा किया जा सकता है, तो नेटवर्क ट्रांसफर लागत भी
head
जैसे टैग को पार्स करने की प्रक्रिया भी CPU के लिए आसान और छोटी हो जाएगी, और यह हर तरह से अच्छा लगेगा।
इसके अलावा, मैंने सोचा कि TCP संचार होने के बावजूद HTTP में ऐसा कुछ भी नहीं होगा जो न किया जा सके, और जब मैंने खोजा तो पता चला कि यह वास्तव में संभव है।
HTTP रेंज रिक्वेस्ट

Curl के साथ परीक्षण

इस तरह से

-H
विकल्प के साथ हेडर जानकारी में रेंज चौड़ाई जोड़कर इसे सीमित किया जा सकता है।

$ curl -H "Range: bytes=0-1024" https://soulminingrig.com/
<!DOCTYPE html>
<html lang="ja"><head><meta charset="utf-8"><meta content="width=device-width,initial-scale=1.0" name="viewport"><title>Home - SOULMINIGRIG</title><meta content="light dark" name="supported-color-schemes"><meta content="hsl(220, 20%, 100%)" media="(prefers-color-scheme: light)" name="theme-color"><meta content="hsl(220, 20%, 10%)" media="(prefers-color-scheme: dark)" name="theme-color"><link href="/pagefind/pagefind-ui.css" rel="stylesheet"><link href="/styles.css" rel="stylesheet"><link href="/feed.xml" rel="alternate" title="SOULMINIGRIG" type="application/atom+xml"><link href="/feed.json" rel="alternate" title="SOULMINIGRIG" type="application/json"><link href="/favicon.png" rel="icon" sizes="32x32" type="image/png"><link href="https://soulminingrig.com/" rel="canonical"><script src="/js/main.js" type="module"></script><style>.page-title{background:var(--color-highlight);padding:.5em;font-size:1.2em}</style><script data-website-id="6031aa47-e715-4f87-a99a-9e3046e5dcdc" defer="" src="https://n

चूंकि यह एक रेंज स्पेसिफिकेशन है, इसलिए यह शुरुआत में न होने पर भी ठीक लगता है।

$ curl -H "Range: bytes=1025-1025" https://soulminingrig.com/
o

अब तो 1 बाइट भी ठीक से वापस आ जाती है।

व्यावहारिक रूप से

केवल हेडर जानकारी में जोड़कर प्राप्त करते समय रेंज प्रतिबंध लगाया जा सकता है, इसलिए यह मूल रूप से किसी भी भाषा में संभव है, और सबसे महत्वपूर्ण बात यह है कि यह नेटवर्क बैंडविड्थ का पर्यावरण के अनुकूल उपयोग करने की अनुमति देता है जिसके बारे में हम अक्सर जागरूक नहीं होते हैं।
यदि आप HTML का

<head>
के अंदर की जानकारी निकालना चाहते हैं, तो
Range: bytes=0-4096
की तरह निर्दिष्ट करें, और यदि यह काम नहीं करता है, तो पूरा प्राप्त करें या इसे और अधिक पर्यावरण के अनुकूल बनाने के लिए 4096 बाइट इकाइयों में अगली रेंज चौड़ाई के साथ
Get
रिक्वेस्ट भेजें।
नतीजतन, बाद की प्रोसेसिंग लाइब्रेरी HTML टैग निकालने में कम समय लेगी, और यह सर्वर के लिए भी सौम्य होगा।

हालांकि, जैसा कि MDN साइट पर भी बताया गया है,
"यह जांचना कि सर्वर आंशिक अनुरोधों का समर्थन करता है या नहीं" - यह मान लेना अच्छा नहीं है कि आजकल हर जगह इसका समर्थन किया जाता है, इसलिए यदि आप इसे सख्ती से करना चाहते हैं, तो आपको हेडर जानकारी से वापसी के आधार पर निर्णय लेने की शर्त का भी उपयोग करना होगा।

लेकिन, इंटरनेट का नया सम्राट...।

एक टिकर प्रतीक जो कहता है कि यह इंटरनेट का नया राजा है,

NET
के नाम पर
CloudFlare
का उपयोग करते समय, ऐसा लगता है कि अनुरोधों पर प्रतिबंध लगाए जाते हैं, इसलिए भले ही प्रोसेसिंग तेज हो जाए, यदि DDoS सुरक्षा के रूप में बीच में एक ब्लॉक आता है, तो अंततः इसका कोई मजबूत अर्थ महसूस नहीं होता है।
हालांकि, यदि आप VPS पर कोई बॉट चला रहे हैं और यह बाहरी अनुरोधों के लिए बहुत अधिक बैंडविड्थ का उपयोग करता है (हालांकि शायद ही कोई इतना उपयोग करता हो...), तो इस तरह के आंशिक अनुरोध प्रभावी हो सकते हैं।

हालांकि, HTTP अनुरोध करने पर एक बार मेमोरी स्पेस में संग्रहीत होने की उम्मीद है, इसलिए मेमोरी उपयोग में थोड़ी कमी आ सकती है। इसलिए, यदि कोई ऐसा टूल बनाता है जो किसी साइट की जानकारी प्राप्त करना चाहता है, तो इस सुविधा को शामिल करने से यह सर्वर के लिए थोड़ा अधिक सौम्य व्यवहार होगा, इसलिए आवश्यकतानुसार ऐसा करना आवश्यक हो सकता है।

यह HTTP के बारे में कुछ ऐसा था जिसे मैं जानता था, लेकिन वास्तव में नहीं जानता था।

Related Posts