ব্লগে ফিরে যান

402 Payment Required-এর প্রত্যাবর্তন: HTTP স্ট্যাটাস কোড বট ট্রাফিক সম্পর্কে কী বলে

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

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

স্ট্যাটাস কোড একটি ফার্স্ট-ক্লাস অ্যানালিটিক্স সিগন্যাল

HTTP সিমান্টিকস স্পেসিফিকেশন (RFC 9110) স্ট্যাটাস কোডকে একটি রিকোয়েস্টের ফলাফল বর্ণনাকারী তিন-অঙ্কের একটি ইন্টিজার হিসেবে সংজ্ঞায়িত করে, যা পাঁচটি শ্রেণিতে ভাগ করা হয়: 1xx তথ্যমূলক, 2xx সফল, 3xx রিডাইরেকশন, 4xx ক্লায়েন্ট এরর, এবং 5xx সার্ভার এরর। যেহেতু Monoid Cloudflare এজে চলে, তাই আমরা কোনো ক্লায়েন্ট স্ক্রিপ্ট চলার আগেই অরিজিন (অথবা এজ নিজেই) যে স্ট্যাটাস কোড ফেরত দেয় তা দেখতে পাই। এই ক্রমটি গুরুত্বপূর্ণ। ব্রাউজার বিকন দ্বারা রেকর্ড করা কোনো পেজ ভিউ কেবল তখনই থাকতে পারে যখন ডকুমেন্টটি সত্যিই 2xx দিয়ে সার্ভ ও পার্স করা হয়েছে। কিন্তু রিকোয়েস্ট স্ট্রিমে সফল ডকুমেন্টের চেয়ে অনেক বেশি কিছু থাকে।

একটি সাধারণ অরিজিন সারাদিনে কী ফেরত দেয় তা ভেবে দেখুন: সফল HTML ডকুমেন্ট, কন্ডিশনাল রিকোয়েস্টের জন্য 304 Not Modified রেসপন্স, ক্যাননিকালাইজেশন থেকে আসা 301/308 রিডাইরেক্ট, প্রোবিং স্ক্যানারের জন্য 404, এবং ইনসিডেন্টের সময় 5xx-এর ঝাঁক। শুধু সফলভাবে রেন্ডার হওয়া ডকুমেন্ট গোনা আর বাকিটা উপেক্ষা করা এমন প্রসঙ্গ ফেলে দেয় যা আপনার ট্রাফিক কার্ভের অস্বাভাবিকতা ব্যাখ্যা করে।

স্ট্যাটাস বিতরণে বটরা কোথায় লুকায়

স্বয়ংক্রিয় ক্লায়েন্টরা ব্রাউজারের থেকে ভিন্নভাবে আচরণ করে, আর স্ট্যাটাস কোড এই পার্থক্যকে কম খরচে প্রকাশ করে দেয়। ভালনারেবিলিটি স্ক্যানার অ্যাডমিন প্যানেল ও পরিচিত CMS পাথ খুঁজতে গিয়ে ঘন 404 আর 403 রেসপন্সের গুচ্ছ তৈরি করে। আগ্রাসী ক্রলার 429 Too Many Requests-কে উপেক্ষা করে — যা RFC 6585-এ রেট লিমিটিংয়ের রেসপন্স হিসেবে সংজ্ঞায়িত — আর ক্রমাগত আঘাত করতে থাকে, এমন একটি সিগনেচার তৈরি করে যা কোনো মানব সেশন কখনো তৈরি করে না। সরল স্ক্র্যাপাররা প্রায়ই এমন রিডাইরেক্ট চেইন অনুসরণ করে যা প্রকৃত ব্রাউজার bfcache বা হিস্ট্রির মাধ্যমে সংক্ষিপ্ত করে ফেলত।

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

কেন শুধু ক্লায়েন্ট-সাইড অ্যানালিটিক্স এখানে ভুল করে

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

উপকারী মধ্যবর্তী পথ হলো এজ-লেভেল স্ট্যাটাস ক্লাসিফিকেশন যা একটি প্রাইভেসি-ফার্স্ট গণনা মডেলকে খাওয়ায়:

  • একটি প্রকৃত নেভিগেশনসহ 2xx text/html একটি সম্ভাব্য পেজ ভিউ।
  • 3xx-কে গন্তব্যের সাথে যুক্ত করা উচিত, দুবার গোনা উচিত নয়।
  • 4xx হলো ডায়াগনস্টিক, অডিয়েন্স নয় — এটি আলাদাভাবে দেখান।
  • 5xx একটি রিলায়েবিলিটি প্যানেলে থাকা উচিত, যা সফল ভিউয়ের যেকোনো পতনের সাথে সম্পর্কিত।

কাউকে ট্র্যাক না করেই এটি করা

এর কোনোটিরই কোনো ভিজিটরকে শনাক্ত করার প্রয়োজন নেই। স্ট্যাটাস কোড, মেথড, রেসপন্স ক্লাস, এবং মোটামুটি সময় হলো রিকোয়েস্ট-রেসপন্স বিনিময়-এর বৈশিষ্ট্য, কোনো ব্যক্তির নয়। Monoid কখনো কুকি সেট করে না, কখনো localStorage পড়ে না, এবং কখনো ডিভাইস ফিঙ্গারপ্রিন্টিং করে না। 03:00 UTC-তে 429-এর একটি ঝাঁক অডিয়েন্স নয় বরং অটোমেশন থেকে এসেছে তা জানতে আমাদের কোনো স্থায়ী শনাক্তকারীর প্রয়োজন নেই — স্ট্যাটাস বিতরণ নিজেই তা বলে দেয়। এটি ডেটা মিনিমাইজেশন আমাদের পক্ষে কাজ করার একটি উদাহরণ: সবচেয়ে কম ব্যক্তিগত সিগন্যালটিই ট্রাফিক মানের জন্য সবচেয়ে সৎ সিগন্যালগুলোর একটি।

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

ব্যবহারিক শিক্ষা

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

সূত্র

Comments

Loading comments…