ব্যবহারকারী-এজেন্ট ক্লায়েন্ট ইঙ্গিত দিয়ে ব্যবহারকারীর গোপনীয়তা এবং বিকাশকারীর অভিজ্ঞতা উন্নত করা

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

ক্লায়েন্ট হিন্টস ডেভেলপারদের ইউজার-এজেন্ট (UA) স্ট্রিং থেকে তথ্য পার্স করার পরিবর্তে, ব্যবহারকারীর ডিভাইস বা অবস্থা সম্পর্কে সক্রিয়ভাবে তথ্য অনুরোধ করার সুযোগ দেয়। এই বিকল্প পথটি প্রদান করা হলো ইউজার-এজেন্ট স্ট্রিং-এর সূক্ষ্মতা পর্যায়ক্রমে হ্রাস করার প্রথম পদক্ষেপ।

আপনার বিদ্যমান কার্যকারিতা, যা ইউজার-এজেন্ট স্ট্রিং পার্স করার উপর নির্ভরশীল, সেটিকে ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস ব্যবহার করার জন্য কীভাবে আপডেট করবেন তা শিখুন।

পটভূমি

ওয়েব ব্রাউজার যখন অনুরোধ পাঠায়, তখন সেগুলোতে ব্রাউজার এবং তার পরিবেশ সম্পর্কিত তথ্য অন্তর্ভুক্ত থাকে, যাতে সার্ভারগুলো অ্যানালিটিক্স চালু করতে এবং প্রতিক্রিয়াটি কাস্টমাইজ করতে পারে। এটি সেই ১৯৯৬ সালেই (HTTP/1.0-এর জন্য RFC 1945) সংজ্ঞায়িত করা হয়েছিল, যেখানে আপনি ইউজার-এজেন্ট স্ট্রিং-এর মূল সংজ্ঞাটি খুঁজে পেতে পারেন, যার মধ্যে একটি উদাহরণও রয়েছে:

User-Agent: CERN-LineMode/2.15 libwww/2.17b3

এই হেডারটির উদ্দেশ্য ছিল গুরুত্বের ক্রমানুসারে পণ্য (যেমন ব্রাউজার বা লাইব্রেরি) এবং একটি মন্তব্য (যেমন সংস্করণ) নির্দিষ্ট করা।

ইউজার-এজেন্ট স্ট্রিং-এর অবস্থা

বিগত দশকগুলোতে , এই স্ট্রিংটিতে অনুরোধকারী ক্লায়েন্ট সম্পর্কে বিভিন্ন অতিরিক্ত বিবরণ জমা হয়েছে (পাশাপাশি পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যতার কারণে অপ্রয়োজনীয় অংশও যুক্ত হয়েছে)। ক্রোমের বর্তমান ইউজার-এজেন্ট স্ট্রিংটি দেখলে আমরা তা বুঝতে পারি:

Mozilla/5.0 (Linux; Android 10; Pixel 3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4076.0 Mobile Safari/537.36

উপরের স্ট্রিংটিতে ব্যবহারকারীর অপারেটিং সিস্টেম ও ভার্সন, ডিভাইসের মডেল, ব্রাউজারের ব্র্যান্ড ও সম্পূর্ণ ভার্সন সম্পর্কিত তথ্য রয়েছে—যা থেকে এটি একটি মোবাইল ব্রাউজার বলে অনুমান করার জন্য যথেষ্ট সূত্র পাওয়া যায়। এছাড়াও ঐতিহাসিক কারণে এতে অন্যান্য ব্রাউজারেরও বেশ কিছু উল্লেখ রয়েছে।

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

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

ইউজার-এজেন্ট স্ট্রিং-এর ক্ষেত্রে ওয়েব সামঞ্জস্যতা উন্নত করারও প্রয়োজন রয়েছে। এটি অসংগঠিত হওয়ায়, এটিকে পার্স করার ফলে অপ্রয়োজনীয় জটিলতা তৈরি হয়, যা প্রায়শই বাগ এবং সাইটের সামঞ্জস্যতাজনিত সমস্যার কারণ হয়ে দাঁড়ায় এবং ব্যবহারকারীদের ভোগায়। এই সমস্যাগুলো তুলনামূলকভাবে কম প্রচলিত ব্রাউজারের ব্যবহারকারীদেরও বেশি ভোগায়, কারণ সাইটগুলো হয়তো তাদের কনফিগারেশন অনুযায়ী পরীক্ষা করতে ব্যর্থ হয়েছে।

নতুন ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস চালু করা হচ্ছে

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

ক্লায়েন্ট হিন্টসের বর্তমান সেটটি মূলত ব্রাউজারের ডিসপ্লে এবং সংযোগ ক্ষমতা বর্ণনা করে। আপনি ‘ক্লায়েন্ট হিন্টস ব্যবহার করে রিসোর্স নির্বাচন স্বয়ংক্রিয়করণ’ অংশে এর বিস্তারিত জানতে পারেন, তবে এখানে প্রক্রিয়াটির একটি সংক্ষিপ্ত পুনরালোচনা দেওয়া হলো।

সার্ভার একটি হেডারের মাধ্যমে নির্দিষ্ট ক্লায়েন্ট হিন্টস জানতে চায়:

⬇️ সার্ভারের প্রতিক্রিয়া

Accept-CH: Viewport-Width, Width

অথবা একটি মেটা ট্যাগ:

<meta http-equiv="Accept-CH" content="Viewport-Width, Width" />

এরপর ব্রাউজারটি পরবর্তী অনুরোধগুলিতে নিম্নলিখিত হেডারগুলি ফেরত পাঠাতে পারে:

⬆️ পরবর্তী অনুরোধ

Viewport-Width: 460
Width: 230

সার্ভার তার প্রতিক্রিয়া পরিবর্তন করতে পারে, যেমন উপযুক্ত রেজোলিউশনে ছবি পরিবেশন করা।

ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস, Accept-CH সার্ভার রেসপন্স হেডারের মাধ্যমে নির্দিষ্ট করা যায় এমন Sec-CH-UA প্রিফিক্সযুক্ত প্রপার্টিগুলোর পরিসরকে প্রসারিত করে। সমস্ত বিস্তারিত জানতে, প্রথমে ব্যাখ্যাটি পড়ুন এবং তারপর সম্পূর্ণ প্রস্তাবটি গভীরভাবে দেখুন।

ক্রোমিয়াম ৮৯ থেকে ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস

ক্রোমের ৮৯ সংস্করণ থেকে ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস ডিফল্টরূপে সক্রিয় করা হয়েছে।

ডিফল্টরূপে, ব্রাউজারটি ব্রাউজার ব্র্যান্ড, গুরুত্বপূর্ণ / প্রধান সংস্করণ, প্ল্যাটফর্ম এবং ক্লায়েন্টটি মোবাইল ডিভাইস কিনা তার একটি সূচক ফেরত দেয়:

⬆️ সকল অনুরোধ

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?0
Sec-CH-UA-Platform: "macOS"

ব্যবহারকারী-এজেন্ট প্রতিক্রিয়া এবং অনুরোধ হেডার

⬇️ প্রতিক্রিয়া Accept-CH
⬆️ অনুরোধ হেডার
⬆️ অনুরোধ
উদাহরণ মান
বর্ণনা
Sec-CH-UA "Chromium";v="84",
"Google Chrome";v="84"
ব্রাউজার ব্র্যান্ড এবং তাদের গুরুত্বপূর্ণ সংস্করণগুলোর তালিকা।
Sec-CH-UA-Mobile ?1 ব্রাউজারটি মোবাইল ডিভাইসে আছে কিনা ( ?1 হলে সত্য) বা নেই ( ?0 হলে মিথ্যা) তা নির্দেশকারী বুলিয়ান।
Sec-CH-UA-Full-Version "84.0.4143.2" [ অপ্রচলিত ] ব্রাউজারের জন্য সম্পূর্ণ সংস্করণ।
Sec-CH-UA-Full-Version-List "Chromium";v="84.0.4143.2",
"Google Chrome";v="84.0.4143.2"
ব্রাউজার ব্র্যান্ড এবং তাদের পূর্ণ সংস্করণের তালিকা।
Sec-CH-UA-Platform "Android" ডিভাইসটির প্ল্যাটফর্ম, যা সাধারণত অপারেটিং সিস্টেম (OS) নামে পরিচিত।
Sec-CH-UA-Platform-Version "10" প্ল্যাটফর্ম বা অপারেটিং সিস্টেমের জন্য সংস্করণ।
Sec-CH-UA-Arch "arm" ডিভাইসটির অন্তর্নিহিত আর্কিটেকচার। যদিও এটি পৃষ্ঠাটি প্রদর্শনের জন্য প্রাসঙ্গিক নাও হতে পারে, সাইটটি এমন একটি ডাউনলোডের সুযোগ দিতে চাইতে পারে যা ডিফল্টরূপে সঠিক ফরম্যাটে থাকে।
Sec-CH-UA-Model "Pixel 3" ডিভাইসের মডেল।
Sec-CH-UA-Bitness "64" অন্তর্নিহিত আর্কিটেকচারের বিটনেস (অর্থাৎ, একটি পূর্ণসংখ্যা বা মেমরি অ্যাড্রেসের বিটে পরিমাপকৃত আকার)

উদাহরণ বিনিময়

একটি উদাহরণ বিনিময় দেখতে এইরকম হবে:

⬆️ ব্রাউজার থেকে প্রাথমিক অনুরোধ
ব্রাউজারটি সাইট থেকে /downloads পৃষ্ঠাটির জন্য অনুরোধ করছে এবং এর ডিফল্ট বেসিক ইউজার-এজেন্ট পাঠাচ্ছে।

GET /downloads HTTP/1.1
Host: example.site

Sec-CH-UA: "Chromium";v="93", "Google Chrome";v="93", " Not;A Brand";v="99"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Platform: "Android"

⬇️ সার্ভারের প্রতিক্রিয়া
সার্ভারটি পৃষ্ঠাটি ফেরত পাঠায় এবং এর পাশাপাশি ব্রাউজারের সম্পূর্ণ সংস্করণ ও প্ল্যাটফর্ম জানতে চায়।

HTTP/1.1 200 OK
Accept-CH: Sec-CH-UA-Full-Version-List

⬆️ পরবর্তী অনুরোধগুলি
ব্রাউজারটি সার্ভারকে অতিরিক্ত তথ্যে প্রবেশাধিকার দেয় এবং পরবর্তী সমস্ত অনুরোধে সেই বাড়তি ইঙ্গিতগুলো ফেরত পাঠায়।

GET /downloads/app1 HTTP/1.1
Host: example.site

Sec-CH-UA: " Not A;Brand";v="99", "Chromium";v="98", "Google Chrome";v="98"
Sec-CH-UA-Mobile: ?1
Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"
Sec-CH-UA-Platform: "Android"

জাভাস্ক্রিপ্ট এপিআই

হেডারগুলোর পাশাপাশি, জাভাস্ক্রিপ্টে navigator.userAgentData এর মাধ্যমেও ইউজার-এজেন্ট অ্যাক্সেস করা যায়। ডিফল্ট Sec-CH-UA , Sec-CH-UA-Mobile , এবং Sec-CH-UA-Platform হেডারের তথ্য যথাক্রমে brands এবং mobile প্রপার্টিগুলোর মাধ্যমে অ্যাক্সেস করা যায়।

// Log the brand data
console.log(navigator.userAgentData.brands);

// output
[
  {
    brand: 'Chromium',
    version: '93',
  },
  {
    brand: 'Google Chrome',
    version: '93',
  },
  {
    brand: ' Not;A Brand',
    version: '99',
  },
];

// Log the mobile indicator
console.log(navigator.userAgentData.mobile);

// output
false;

// Log the platform value
console.log(navigator.userAgentData.platform);

// output
"macOS";

getHighEntropyValues() কলের মাধ্যমে অতিরিক্ত মানগুলো অ্যাক্সেস করা হয়। "হাই এন্ট্রপি" শব্দটি ইনফরমেশন এন্ট্রপিকে বোঝায়, অন্য কথায় - এই মানগুলো ব্যবহারকারীর ব্রাউজার সম্পর্কে যে পরিমাণ তথ্য প্রকাশ করে। অতিরিক্ত হেডার অনুরোধ করার মতোই, কোন মানগুলো ফেরত দেওয়া হবে, বা আদৌ কোনো মান ফেরত দেওয়া হবে কিনা, তা ব্রাউজারের উপরই নির্ভর করে।

// Log the full user-agent data
navigator
  .userAgentData.getHighEntropyValues(
    ["architecture", "model", "bitness", "platformVersion",
     "fullVersionList"])
  .then(ua => { console.log(ua) });

// output
{
   "architecture":"x86",
   "bitness":"64",
   "brands":[
      {
         "brand":" Not A;Brand",
         "version":"99"
      },
      {
         "brand":"Chromium",
         "version":"98"
      },
      {
         "brand":"Google Chrome",
         "version":"98"
      }
   ],
   "fullVersionList":[
      {
         "brand":" Not A;Brand",
         "version":"99.0.0.0"
      },
      {
         "brand":"Chromium",
         "version":"98.0.4738.0"
      },
      {
         "brand":"Google Chrome",
         "version":"98.0.4738.0"
      }
   ],
   "mobile":false,
   "model":"",
   "platformVersion":"12.0.1"
}

ডেমো

আপনি user-agent-client-hints.glitch.me -এ আপনার নিজের ডিভাইসে হেডার এবং জাভাস্ক্রিপ্ট এপিআই উভয়ই পরীক্ষা করে দেখতে পারেন।

ইঙ্গিতের জীবনকাল এবং রিসেটিং

Accept-CH হেডারের মাধ্যমে নির্দিষ্ট করা ইঙ্গিতগুলো ব্রাউজার সেশন চলাকালীন অথবা ভিন্ন কোনো ইঙ্গিত সেট নির্দিষ্ট না করা পর্যন্ত পাঠানো হবে।

তার মানে যদি সার্ভার পাঠায়:

⬇️ প্রতিক্রিয়া

Accept-CH: Sec-CH-UA-Full-Version-List

এরপর ব্রাউজারটি বন্ধ না করা পর্যন্ত, সেই সাইটের সমস্ত অনুরোধে ব্রাউজারটি Sec-CH-UA-Full-Version-List হেডারটি পাঠাবে।

⬆️ পরবর্তী অনুরোধগুলি

Sec-CH-UA-Full-Version-List: " Not A;Brand";v="99.0.0.0", "Chromium";v="98.0.4738.0", "Google Chrome";v="98.0.4738.0"

তবে, যদি অন্য কোনো Accept-CH হেডার পাওয়া যায়, তাহলে সেটি ব্রাউজারের পাঠানো বর্তমান ইঙ্গিতগুলোকে সম্পূর্ণরূপে প্রতিস্থাপন করবে।

⬇️ প্রতিক্রিয়া

Accept-CH: Sec-CH-UA-Bitness

⬆️ পরবর্তী অনুরোধগুলি

Sec-CH-UA-Platform: "64"

পূর্বে অনুরোধ করা Sec-CH-UA-Full-Version-List পাঠানো হবে না

Accept-CH হেডারটিকে ওই নির্দিষ্ট পেজটির জন্য প্রয়োজনীয় সমস্ত হিন্টস-এর একটি সম্পূর্ণ সেট হিসেবে ভাবাই শ্রেয়, যার অর্থ হলো ব্রাউজার তখন ওই পেজের সমস্ত সাবরিসোর্সের জন্য নির্দিষ্ট হিন্টসগুলো পাঠিয়ে দেয়। যদিও হিন্টসগুলো পরবর্তী নেভিগেশনেও থেকে যায়, তবুও সাইটের এগুলোর ওপর নির্ভর করা বা ধরে নেওয়া উচিত নয় যে সেগুলো পৌঁছে দেওয়া হবে।

রেসপন্সে একটি খালি Accept-CH পাঠিয়ে ব্রাউজার থেকে পাঠানো সমস্ত ইঙ্গিত কার্যকরভাবে মুছে ফেলার জন্যও আপনি এটি ব্যবহার করতে পারেন। ব্যবহারকারী যেখানে প্রেফারেন্স রিসেট করছেন বা আপনার সাইট থেকে সাইন আউট করছেন, সেখানে এটি যোগ করার কথা বিবেচনা করুন।

এই প্যাটার্নটি <meta http-equiv="Accept-CH" …> ট্যাগের মাধ্যমে হিন্টস যেভাবে কাজ করে তার সাথেও মেলে। অনুরোধ করা হিন্টসগুলো শুধুমাত্র পেজ দ্বারা শুরু করা অনুরোধের ক্ষেত্রেই পাঠানো হবে, পরবর্তী কোনো নেভিগেশনের ক্ষেত্রে নয়।

ইঙ্গিতের পরিধি এবং ক্রস-অরিজিন অনুরোধ

ডিফল্টরূপে, ক্লায়েন্ট হিন্টস শুধুমাত্র একই-অরিজিন অনুরোধের ক্ষেত্রেই পাঠানো হবে। এর মানে হলো, আপনি যদি https://example.com এর জন্য নির্দিষ্ট হিন্টস চান, কিন্তু যে রিসোর্সগুলো আপনি অপ্টিমাইজ করতে চান সেগুলো https://downloads.example.com এ থাকে, তাহলে সেগুলো কোনো হিন্টস পাবে না

ক্রস-অরিজিন অনুরোধে হিন্ট ব্যবহারের অনুমতি দিতে হলে, প্রতিটি হিন্ট এবং অরিজিন অবশ্যই একটি Permissions-Policy হেডার দ্বারা নির্দিষ্ট করতে হবে। এটি একটি User-Agent Client Hint-এ প্রয়োগ করতে হলে, আপনাকে হিন্টটির অক্ষরগুলো ছোট হাতের অক্ষরে লিখতে হবে এবং sec- প্রিফিক্সটি সরিয়ে ফেলতে হবে। উদাহরণস্বরূপ:

⬇️ example.com থেকে প্রাপ্ত প্রতিক্রিয়া

Accept-CH: Sec-CH-UA-Platform-Version, DPR
Permissions-Policy: ch-ua-platform-version=(self "downloads.example.com"),
                    ch-dpr=(self "cdn.provider" "img.example.com");

⬆️ downloads.example.com এ অনুরোধ

Sec-CH-UA-Platform-Version: "10"

⬆️ cdn.provider বা img.example.com এ পাঠানো অনুরোধ

DPR: 2

ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস কোথায় ব্যবহার করবেন?

এর সংক্ষিপ্ত উত্তর হলো, যেখানেই আপনি ইউজার-এজেন্ট হেডার পার্স করছেন অথবা একই তথ্য অ্যাক্সেস করে এমন কোনো জাভাস্ক্রিপ্ট কল (যেমন navigator.userAgent , navigator.appVersion , বা navigator.platform ) ব্যবহার করছেন, সেই সমস্ত ক্ষেত্রকে রিফ্যাক্টর করে তার পরিবর্তে ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস ব্যবহার করা উচিত।

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

এই সীমাবদ্ধতাগুলো মাথায় রেখে, ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস রিপোটি সাইটগুলোর জন্য কিছু বৈধ ব্যবহারের ক্ষেত্র তালিকাভুক্ত করেছে

ইউজার-এজেন্ট স্ট্রিংটির কী হয়?

পরিকল্পনাটি হলো, বিদ্যমান ইউজার-এজেন্ট স্ট্রিং দ্বারা প্রকাশিত শনাক্তকারী তথ্যের পরিমাণ কমিয়ে ওয়েবে গোপনে ট্র্যাক করার ক্ষমতা হ্রাস করা, এবং একই সাথে বিদ্যমান সাইটগুলিতে কোনো অযাচিত ব্যাঘাত না ঘটানো। ইউজার-এজেন্ট স্ট্রিং-এ কোনো পরিবর্তন আনার আগেই, ইউজার-এজেন্ট ক্লায়েন্ট হিন্টস চালু করার ফলে আপনি এই নতুন সক্ষমতাটি বুঝতে ও পরীক্ষা করে দেখতে পারবেন।

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

আপনি Chrome 93 থেকে about://flags/#reduce-user-agent ফ্ল্যাগটি সক্রিয় করে এর একটি সংস্করণ পরীক্ষা করতে পারেন (দ্রষ্টব্য: Chrome 84 - 92 সংস্করণগুলিতে এই ফ্ল্যাগটির নাম ছিল about://flags/#freeze-user-agent )। সামঞ্জস্যতার কারণে এটি ঐতিহাসিক এন্ট্রিগুলোসহ একটি স্ট্রিং ফেরত দেবে, তবে এতে নির্দিষ্ট বিবরণগুলো পরিমার্জিত থাকবে। উদাহরণস্বরূপ, এইরকম কিছু:

Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.0.0 Mobile Safari/537.36

আনস্প্ল্যাশে সের্গেই জোলকিনের তৈরি থাম্বনেইল