User-Agent পার্সার
ডেভUser-Agent স্ট্রিংকে ব্রাউজার, ইঞ্জিন, অপারেটিং সিস্টেম ও ডিভাইস ধরনে পার্স করে। অনুমানিক, সম্পূর্ণ ক্লায়েন্ট-সাইড।
- ব্রাউজার
- ইঞ্জিন
- অপারেটিং সিস্টেম
- ডিভাইস ধরন
- বট / ক্রলার
এই পৃষ্ঠায়
User-Agent পার্সার কী?#
User-Agent (UA) স্ট্রিং হলো টেক্সটের সেই লাইন যা প্রতিটি ব্রাউজার এবং HTTP ক্লায়েন্ট নিজেকে বর্ণনা করতে তার অনুরোধে যোগ করে। এটি একটি বিখ্যাত অসংগঠিত বিশৃঙ্খলাও: বিক্রেতারা ঐতিহাসিক সামঞ্জস্যের টোকেনগুলো একে অপরের উপরে স্তূপ করে, তাই একটি একক আধুনিক Chrome স্ট্রিং-এ Mozilla, AppleWebKit, KHTML, Gecko, এবং Safari শব্দগুলোও থাকে — যার কোনোটিই মানে না যে ব্রাউজারটি আসলে সেগুলোর কোনোটি। একটি কাঁচা UA চোখে পড়া ধীর এবং ত্রুটিপ্রবণ, যার কারণ প্রায় প্রতিটি অ্যানালিটিক্স ড্যাশবোর্ড, অ্যাক্সেস-লগ টুল, এবং বট-শনাক্ষকরণ স্তর এটিকে প্রথমে একটি পার্সারের মাধ্যমে চালায়।
এই পৃষ্ঠাটি যেকোনো UA স্ট্রিং নেয় এবং এটিকে পাঁচটি তথ্যে ভাঙে যা আপনি সত্যিই চান: ব্রাউজার (নাম এবং সংস্করণ), ইঞ্জিন (রেন্ডারিং কোর), অপারেটিং সিস্টেম (অপারেটিং সিস্টেম এবং সংস্করণ), ডিভাইস ধরন (ডেস্কটপ, মোবাইল, বা ট্যাবলেট), এবং isBot (স্ট্রিংটি একটি ক্রলারের মতো দেখায় কি না)। এটি সম্পূর্ণ আপনার ব্রাউজারে চলে — একটি লগ লাইন থেকে একটি স্ট্রিং পেস্ট করুন এবং বিশ্লেষণটি পড়ুন, কোনো সার্ভার রাউন্ড-ট্রিপ ছাড়াই।
ব্রাউজার শনাক্ষকরণ যে দেখার চেয়ে কঠিন তার কারণ হলো অর্ডারিং। বিশেষায়িত ব্রাউজারগুলো অবশ্যই Chrome-এর আগে চেক করা উচিত, কারণ তাদের UA স্ট্রিংগুলোতে সবগুলোতে সামঞ্জস্যের জন্য আক্ষরিক টোকেন Chrome থাকে। Microsoft Edge, Opera, Samsung Internet, Vivaldi এবং CocCoc — একটি সরল if (ua.includes("chrome")) চেক দ্বারা সবগুলোকেই ভুলভাবে Chrome হিসেবে রিপোর্ট করা হতো। ইঞ্জিনের ক্ষেত্রেও একই সত্য: স্ট্রিং AppleWebKit Blink ব্রাউজার (Chrome, Edge, Opera) এবং বিশুদ্ধ WebKit ব্রাউজার (Safari) উভয়ের মধ্যেই দেখা যায়, তাই ইঞ্জিনটি ব্রাউজার পরিবার থেকে অনুমান করা হয়, সরাসরি ম্যাচ করা হয় না।
কীভাবে ব্যবহার করবেন#
- এই ব্রাউজারের নিজস্ব
navigator.userAgentইনপুট বক্সে লোড করতে উপরে আমার ব্রাউজার ব্যবহার করুন ক্লিক করুন — আপনার নিজের ট্রাফিক কেমন দেখায় তা দেখার দ্রুততম উপায়। - অথবা যেকোনো UA স্ট্রিং ইনপুট পেনে পেস্ট করুন — একটি nginx অ্যাক্সেস লগ থেকে, আপনার ব্যাকএন্ডে
req.headers["user-agent"], একটি curl অনুরোধ, যেকোনো কিছু। - আউটপুট পেনের পাঁচটি সারি পড়ুন:
- ব্রাউজার — পরিবারের নাম এবং প্রধান সংস্করণ (যেমন
Chrome 120)। - ইঞ্জিন — রেন্ডারিং ইঞ্জিন (Blink, WebKit, Gecko, Trident)।
- অপারেটিং সিস্টেম — অপারেটিং সিস্টেম এবং সংস্করণ যেখানে পুনরুদ্ধারযোগ্য (যেমন
Windows 10/11,iOS 17,Android 14)। - ডিভাইস —
desktop,mobile, বাtablet,iPad,Mobileছাড়াAndroid,iPhone-এর মতো টোকেন থেকে অনুমান করা। - বট —
হ্যাঁ/না, ক্রলার শনাক্রকারীগুলোর বিপরীতে ম্যাচ করে চিহ্নিত (bot,crawl,spider,slurp,pingdom,headless,phantomjs,curl,wget,python-requests,axios, …)।
- ব্রাউজার — পরিবারের নাম এবং প্রধান সংস্করণ (যেমন
- উভয় পেন খালি করতে মুছুন ক্লিক করুন।
- স্ট্যাটাস লাইন ফলাফলটি সারাংশ করে বা রিপোর্ট করে যে ইনপুটটি খালি ছিল।
প্রধান বৈশিষ্ট্য#
- বিশেষত্ব-প্রথম ব্রাউজার শনাক্ষকরণ। Edge, Opera, Samsung Internet, Vivaldi, CocCoc এবং Firefox সবগুলোই Chrome এবং Safari-এর আগে ম্যাচ করা হয়, তাই সেগুলোকে
Chromeসামঞ্জস্যের টোকেন দ্বারা নীরবে গ্রাস করা হয় না। - পরিবার থেকে অনুমিত ইঞ্জিন। Blink বনাম WebKit শনাক্ষিত ব্রাউজার দ্বারা স্থির করা হয়,
AppleWebKit-এ একটি ভঙ্গুর সরাসরি ম্যাচ দ্বারা নয় — যার কারণ একটি Safari স্ট্রিংকে Chrome হিসেবে রিপোর্ট করা হয় না। - ডিভাইস-ধরন শ্রেণীবিভাগ। ট্যাবলেটগুলোকে ফোন থেকে আলাদা করা হয়
iPadটোকেন এবংAndroid ... Mobileপার্থক্য ব্যবহার করে, একই হিউরিস্টিক অ্যানালিটিক্স টুলগুলো নির্ভর করে। - ক্রলার পতাকা। বট সারিটি সেই স্ট্রিংগুলো চিহ্নিত করে যা আপনি সাধারণত মানুষ-মুখী মেট্রিক্স থেকে বাদ দিতে চান — অনুসন্ধান ক্রলার, আপটাইম মনিটর, হেডলেস ব্রাউজার, এবং HTTP লাইব্রেরি।
- ১০০% ক্লায়েন্ট-সাইড। কোনো UA কখনো কোথাও পাঠানো হয় না। তাও মানে আপনি প্রোডাকশন লগ থেকে টোকেন পেস্ট করতে পারেন সেগুলোকে একটি তৃতীয়-পক্ষের পার্সিং API-তে লিক না করেই।
ব্যবহারের উদাহরণ#
একটি অ্যাক্সেস লগ থেকে এই সাধারণ Chrome-on-Windows স্ট্রিংটি পেস্ট করুন:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
এবং পাঁচটি সারি এভাবে পূরণ হয়:
Browser Chrome 120
Engine Blink
OS Windows 10/11
Device desktop
Bot no
এখন এটিকে একটি Edge স্ট্রিংয়ের সাথে তুলনা করুন — শেষের Edg/120 লক্ষ্য করুন:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
একটি সরল পার্সার যা প্রথমে Chrome চেক করে এখানে Chrome 120 রিপোর্ট করে — ভুল। এই পৃষ্ঠাটি Chrome/-এর আগে Edg/ চেক করে, তাই একই স্ট্রিং সঠিকভাবে Browser: Microsoft Edge 120 দেয়, ইঞ্জিন এখনও Blink (Edge Chromium-ভিত্তিক)।
একটি তৃতীয় ক্ষেত্রে বট পথ দেখায়। curl/7.81.0 পাঠানো একটি স্বাস্থ্য-চেক স্ক্রিপ্ট বট: হ্যাঁ হিসেবে চিহ্নিত হয় যদিও এতে কোনো Mozilla মোড়ক নেই, কারণ curl হলো সেই লাইব্রেরি টোকেনগুলোর একটি যা বট ম্যাচার অনুসন্ধান করে। সেই সারিটিই আপনাকে একটি লগ দেখার সময় প্রকৃত-ব্যবহারকারীর ট্রাফিককে স্বয়ংক্রিয় শব্দ থেকে আলাদা করতে দেয়।
প্রশ্নোত্তর#
আমার Edge ব্রাউজার কেন “Microsoft Edge” হিসেবে রিপোর্ট করে এবং “Chrome” নয়, যদিও UA-তে Chrome শব্দটি আছে?#
কারণ Edge-এর UA ইচ্ছাকৃতভাবে Chrome/120.0.0.0 অন্তর্ভুক্ত করে যাতে Chrome-কে পরিবেশন করতে নির্মিত ওয়েবসাইটগুলো Edge-কেও পরিবেশন করে। এই পার্সারটি প্রথমে Edg/ টোকেন পরীক্ষা করে, তারপর Chrome/, তাই বিশেষায়িত পরিবারটি জয়লাভ করে। যে পার্সারটি তার চেকগুলো এইভাবে অর্ডার করে না তা প্রতিটি Chromium ডেরিভেটিভকে Chrome হিসেবে ভুল রিপোর্ট করবে।
আমি কি একটি UA স্ট্রিং থেকে OS সংস্করণে বিশ্বাস করতে পারি?#
একটি সীমা পর্যন্ত। Windows 10 এবং 11-কে Windows NT 10.0-এ একত্রিত করে, তাই সেগুলো এখানে 10/11 হিসেবে রিপোর্ট করা হয়। iOS এবং macOS সংস্করণগুলো OS X_x_x টোকেন থেকে পুনরুদ্ধারযোগ্য কিন্তু ঐতিহাসিকভাবে রিলিজের সময় ফ্রিজ হয়ে যায়। সংস্করণটিকে একটি শক্তিশালী ইঙ্গিত হিসেবে বিবেচনা করুন, গ্যারান্টি নয়, এবং এতে নিরাপত্তা সিদ্ধান্ত নেবেন না।
বট পতাকাটি কি ট্রাফিক অবরুদ্ধ করার জন্য যথেষ্ট নির্ভরযোগ্য?#
না — UA-ভিত্তিক বট শনাক্ষণ লগ বিশ্লেষণ এবং ড্যাশবোর্ড ফিল্টারিংয়ের জন্য একটি সুবিধা, একটি নিরাপত্তা সীমানা নয়। অযাচিত ক্লায়েন্টরা যা খুশি UA জাল করে, পুরোপুরি মানব-দেখানো সহ। স্পষ্ট ক্রলার এবং লাইব্রেরিগুলো দেখতে এই সারিটি ব্যবহার করুন; রেট লিমিটিং, প্রমাণীকরণ, এবং আচরণগত চেক ব্যবহার করুন এমন কিছুর জন্য যা সত্যিই বিশ্বস্ত হতে হবে।
পার্সারটি সবকিছুর জন্য “অজানা” দেখায়। আমি কী পেস্ট করেছি?#
হয় একটি খালি/সাদাসিধে স্ট্রিং, বা এমন একটি ক্লায়েন্ট থেকে একটি UA যা এই পার্সারটি চেনে না (কিছু ডেস্কটপ অ্যাপ এবং SDK স্বতন্ত্র শনাক্রকারী পাঠায়)। স্ট্যাটাস লাইন প্রথম ক্ষেত্রে বলবে ইনপুটটি খালি ছিল; দ্বিতীয়টিতে, ব্রাউজার এবং OS সহজে অজানা-তে চলে যায় যখন ডিভাইস ধরন ডিফল্টভাবে desktop হয়। কাঁচা স্ট্রিংটি ইনপুট পেনে সংরক্ষিত থাকে যাতে আপনি এটি পরিদর্শন করতে পারেন।