ইউজার এজেন্ট পার্সার

যেকোনো ইউজার-এজেন্ট স্ট্রিং পেস্ট করুন এবং ব্রাউজার, রেন্ডারিং ইঞ্জিন, অপারেটিং সিস্টেম, ডিভাইস ক্লাস এবং CPU আর্কিটেকচার পড়ে নিন, কপি করার উপযোগী JSON ব্রেকডাউনসহ।

একটি ইউজার-এজেন্ট স্ট্রিংকে পড়ার উপযোগী কিছুতে রূপান্তর করুন। আপনার নিজের ইউজার-এজেন্ট ডিফল্টভাবে লোড হয়। এটি কীভাবে ভাঙে তা দেখতে যেকোনো অন্য স্ট্রিং পেস্ট করুন এবং একটি বাগ রিপোর্ট বা টেস্ট ফিক্সচারের জন্য JSON ব্রেকডাউন কপি করুন।

ব্রাউজার
ইঞ্জিন
অপারেটিং সিস্টেম
ডিভাইসের ধরন
CPU আর্কিটেকচার

ইউজার-এজেন্ট স্ট্রিংগুলো কেন এমন দেখায়

তিন দশক ধরে একে অপরের ভান

আধুনিক ইউজার-এজেন্ট একটি বর্ণনা নয়, এটি একটি ফসিল রেকর্ড। প্রায় প্রতিটি ডেস্কটপ ব্রাউজার এখনও Mozilla/5.0 দিয়ে শুরু হয়, একটি টোকেন যা নেটস্কেপ ব্রাউজার যুদ্ধ হেরে যাওয়ার পর থেকে অর্থহীন। এটি টিকে আছে কারণ প্রথম দিকের সার্ভারগুলো ফ্রেম পরিবেশনের আগে Mozilla খুঁজে দেখত, তাই প্রতিটি প্রতিযোগী ডাউনগ্রেড এড়াতে টোকেনটি যোগ করেছিল। একবার একটি ব্রাউজার পেজের ভালো সংস্করণ পেতে মিথ্যা বললে, বাকিদেরও একইভাবে মিথ্যা বলতে হয় নয়তো ব্যবহারকারী হারাতে হয়।

একই সর্পিল বাকি স্ট্রিং তৈরি করেছে। Chrome AppleWebKit/537.36 (KHTML, like Gecko) পাঠায় যদিও এটি 2013 সালে WebKit ব্যবহার বন্ধ করে দিয়েছে এবং KHTML আরও অনেক আগেই মৃত। Edge Edge/-এর বদলে Edg/ যোগ করে, কারণ অনেক সাইটে পুরনো টোকেনের জন্য একটি সাবস্ট্রিং চেক ছিল এবং ভাঙা ফলব্যাক পরিবেশন করত। Safari-এর আসল সংস্করণ একটি Version/ টোকেনে লুকিয়ে থাকে যখন শেষের Safari/537.36 স্থির থাকে। এজন্যই পার্সিং সবচেয়ে নির্দিষ্ট থেকে সর্বনিম্ন নির্দিষ্টের দিকে সাজাতে হয়: প্রতিটি Chromium ফর্কও Chrome দাবি করে, এবং প্রতিটি WebKit ব্রাউজারও Safari দাবি করে, তাই প্রথম আত্মবিশ্বাসী ম্যাচটিই জিততে হবে।

আপনি যা বিশ্বাস করতে পারেন এবং যা পারেন না

স্ট্রিংটি একটি ক্লায়েন্ট-সরবরাহ করা হেডার, যার মানে এটি একটি ইঙ্গিত, কখনো প্রমাণ নয়। যেকোনো HTTP ক্লায়েন্ট যেকোনো কিছু পাঠাতে পারে, এবং ব্যবহারকারীরা এক্সটেনশন বা ডেভেলপার টুলের মাধ্যমে নিয়মিত এটি স্পুফ করে। লগে ডায়াগনস্টিক রঙ হিসেবে এটি ব্যবহার করুন, অথরাইজেশন ইনপুট বা নিরাপত্তা সীমানা হিসেবে নয়।

কেউ মিথ্যা না বললেও মানগুলো ক্রমশ মোটা হচ্ছে। Chrome এবং Edge এখন মাইনর সংস্করণের সেগমেন্টগুলো 0.0.0-তে স্থির করে এবং একটি সংক্ষিপ্ত প্ল্যাটফর্ম স্ট্রিং রিপোর্ট করে, তাই Windows NT 10.0 উইন্ডোজ 10 এবং উইন্ডোজ 11 দুটোই কভার করে এবং macOS বছরের পর বছর 10_15_7-এ স্থির আছে, প্রকৃত রিলিজ যাই হোক না কেন। Firefox তার OS বিবরণ একইভাবে গোল করে। যদি একটি সংস্করণ নম্বর সন্দেহজনকভাবে গোল দেখায়, তবে সম্ভবত সেটিই।

ডিভাইস সনাক্তকরণ সবচেয়ে দুর্বল অংশ। স্ট্রিংয়ে কোনো ডিভাইস ফিল্ড নেই; এটি Mobile, iPad বা Tablet-এর মতো টোকেনের উপস্থিতি বা অনুপস্থিতি থেকে অনুমান করা হয়। অ্যান্ড্রয়েড ট্যাবলেট ক্লাসিক ফাঁদ, কারণ অনেকগুলো শুধুমাত্র Mobile টোকেনের অনুপস্থিতি দ্বারা চিহ্নিত হয়, এবং iPadOS ডিফল্ট কনফিগারেশনে ইচ্ছাকৃতভাবে নিজেকে একটি ডেস্কটপ ম্যাক হিসেবে উপস্থাপন করে।

পরিবর্তে ফিচার ডিটেকশন ব্যবহার করুন, বেশিরভাগ ক্ষেত্রে

আচরণ পরিবর্তন করে এমন যেকোনো কিছুর জন্য লেবেলের বদলে ক্ষমতা পরীক্ষা করুন। if ('share' in navigator) সঠিক এবং টেকসই; if (isSafari) ভেঙে যায় যত তাড়াতাড়ি অন্য কোনো ইঞ্জিন একই API পাঠায় বা Safari একটি ফিক্স পাঠায়। লেআউটের জন্য, CSS মিডিয়া কোয়েরি প্রকৃত ভিউপোর্ট এবং ইনপুট পদ্ধতি বর্ণনা করে ডিভাইস অনুমানের চেয়ে অনেক ভালো।

ইউজার-এজেন্ট যেখানে এখনও কাজে লাগে তা হলো অ্যানালিটিক্স, ক্র্যাশ ট্রায়াজ এবং বাগ পুনরুত্পাদন। জেনে রাখা যে একটি স্ট্যাক ট্রেস শুধুমাত্র Gecko-তে দেখা যায়, বা একটি লেআউট ভাঙা শুধুমাত্র Samsung Internet-এ সীমাবদ্ধ, একটি অপ্রতিরোধ্য রিপোর্টকে একটি নির্দিষ্ট টেস্ট কেসে পরিণত করে। আধুনিক প্রতিস্থাপন হলো ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস API, যা একই তথ্য কাঠামোবদ্ধ মান হিসেবে প্রকাশ করে এবং সম্পূর্ণ প্ল্যাটফর্ম সংস্করণের মতো উচ্চ-এনট্রপি বিবরণের জন্য স্পষ্ট অনুরোধ প্রয়োজন।

ওপেন-সোর্স নোট: কোনো থার্ড-পার্টি লাইব্রেরি ছাড়া ভ্যানিলা জাভাস্ক্রিপ্টে বাস্তবায়িত।

সচরাচর জিজ্ঞাসা

কেন Chrome একই সাথে নিজেকে Mozilla এবং Safari বলে?
ঐতিহাসিক সামঞ্জস্যের জন্য। সার্ভারগুলো একসময় আধুনিক মার্কআপ পাঠানোর আগে Mozilla খুঁজত, এবং পরে WebKit-নির্দিষ্ট CSS পাঠানোর আগে Safari। প্রতিটি ব্রাউজার ডাউনগ্রেড হওয়া এড়াতে এই টোকেনগুলো যোগ করেছিল, এবং এখন সেগুলো সরালে এখনও চেক করা সাইটগুলো ভেঙে যাবে।
নিরাপত্তা সিদ্ধান্তের জন্য কি আমি ইউজার-এজেন্টকে বিশ্বাস করতে পারি?
না। এটি একটি অনুরোধ হেডার যা ক্লায়েন্ট সম্পূর্ণ নিয়ন্ত্রণ করে এবং যেকোনো মান নির্ধারণ করতে পারে। শুধুমাত্র ডায়াগনস্টিকস এবং পরিসংখ্যানের জন্য এটি ব্যবহার করুন। অ্যাক্সেস নিয়ন্ত্রণ বা নীতি প্রয়োগ করে এমন কিছু অবশ্যই অথেনটিকেশনের উপর নির্ভর করবে, স্ব-রিপোর্ট করা স্ট্রিংয়ের উপর নয়।
আমার macOS সংস্করণ কেন 10.15.7 হিসেবে রিপোর্ট হয়?
Safari এবং Chrome ইচ্ছাকৃতভাবে ফিঙ্গারপ্রিন্টিং সারফেস কমাতে রিপোর্ট করা macOS সংস্করণ 10_15_7-এ স্থির করে। ব্রাউজার আসল সংস্করণ জানে কিন্তু হেডারে দেবে না। ক্লায়েন্ট হিন্টস এটি প্রকাশ করতে পারে, তবে শুধুমাত্র যখন সাইটটি স্পষ্টভাবে জিজ্ঞাসা করে।
টুলটি কীভাবে ট্যাবলেটকে ফোন থেকে আলাদা করে?
এটি একটি iPad টোকেন, Mobile টোকেন ছাড়া একটি অ্যান্ড্রয়েড স্ট্রিং, বা একটি স্পষ্ট Tablet মার্কার খোঁজে। এটি বেশিরভাগ লাইব্রেরি যা করে তার প্রতিফলন, কিন্তু এটি মূলত একটি হিউরিস্টিক। কিছু অ্যান্ড্রয়েড ট্যাবলেট শুধুমাত্র স্ট্রিং দিয়ে বড় ফোন থেকে আলাদা করা যায় না।
এটি কি আমার ইউজার-এজেন্ট কোথাও পাঠায়?
না। পার্সিং সম্পূর্ণরূপে আপনার ব্রাউজারে নিয়মিত এক্সপ্রেশন দিয়ে চলে এবং কিছুই আপলোড হয় না। ডিফল্ট মানটি navigator.userAgent থেকে স্থানীয়ভাবে পড়া হয় এবং পেজ কখনো ছাড়ে না।
ইউজার-এজেন্ট স্নিফিংয়ের বদলে কী ব্যবহার করা উচিত?
ক্ষমতার জন্য ফিচার ডিটেকশন, লেআউটের জন্য CSS মিডিয়া কোয়েরি, এবং যখন আপনার সত্যিই প্ল্যাটফর্ম তথ্য দরকার তখন ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস API। ক্লায়েন্ট হিন্টস কাঠামোবদ্ধ মান দেয় এবং স্পষ্ট অপ্ট-ইনের পিছনে উচ্চ-এনট্রপি বিবরণ রাখে।