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 সাইটে যেমন বলা হয়েছে,
"সার্ভার আংশিক রিকোয়েস্ট সমর্থন করে কিনা তা পরীক্ষা করা" - এই ধারণা যে এখন প্রায় সবাই সমর্থন করে, তা ভালো নয়। যদি আপনি কঠোরভাবে এটি করতে চান, তাহলে আপনাকে হেডার তথ্য থেকে ফিরে আসা ডেটা দ্বারা সিদ্ধান্ত নেওয়ার শর্তও ব্যবহার করতে হবে।

তবে, ইন্টারনেটের এক নতুন সম্রাট...

যদি আপনি CloudFlare ব্যবহার করেন, যার টিক্কার প্রতীক NET, যেন এটি নিজেকে ইন্টারনেটের নতুন রাজা ঘোষণা করছে, তাহলে মনে হয় রিকোয়েস্ট প্রতি ইউনিট সীমাবদ্ধ করা হয়। তাই, প্রক্রিয়াকরণ দ্রুত হলেও, যদি মাঝপথে DDoS সুরক্ষার জন্য একটি ব্লক আসে, তাহলে শেষ পর্যন্ত এর অর্থ খুব জোরালো মনে হয় না।
তবে, যদি আপনি একটি VPS-এ কোনো বট চালাচ্ছেন এবং এটি বাইরের রিকোয়েস্টের মাধ্যমে প্রচুর ব্যান্ডউইথ ব্যবহার করে (যদিও সম্ভবত এত বেশি কেউ ব্যবহার করে না...), তাহলে এই ধরনের আংশিক রিকোয়েস্ট কার্যকর হতে পারে।

তবে, যেহেতু HTTP রিকোয়েস্ট একবার করা হলে মেমরি স্পেসে সংরক্ষিত হওয়ার কথা, তাই মেমরি ব্যবহার কিছুটা হলেও কমতে পারে। সুতরাং, যদি কেউ এমন একটি টুল তৈরি করেন যা কোনো ওয়েবসাইটের তথ্য পেতে চায়, তাহলে এই আচরণটি অন্তর্ভুক্ত করলে এটি টার্গেটের প্রতি কিছুটা বন্ধুত্বপূর্ণ হবে, তাই প্রয়োজন অনুযায়ী এটি করা দরকার হতে পারে।

এটি ছিল HTTP সম্পর্কে, যা আমি জানতাম বলে মনে হয়েছিল, কিন্তু আসলে জানতাম না।

Related Posts