ইন্টারনেটে ব্যবহৃত প্রতিটি রিসোর্সের একটি মিডিয়া টাইপ থাকে, যা MIME টাইপ হিসেবে পরিচিত যেটিMultipurpose Internet Mail Extension-এর সংক্ষিপ্ত রূপ। এই তথ্য সার্ভার এবং ক্লায়েন্টের মধ্যের ট্রানজ্যাকশনের জন্য জরুরি।
ব্রাউজারকে পাঠানো রিসোর্সের মিডিয়া টাইপ জানতে হয় যাতে সেটি সেগুলো সঠিকভাবে হ্যান্ডেল করতে পারে।
সার্ভারের জন্যও একই बात। সেটിക്കে পাঠানো রিসোর্সের টাইপ জানতে হয় যাতে সেটি সঠিকভাবে পার্স ও প্রসেস করতে পারে।
Content-Type কোথায় ঘোষিত হয়?
যেকোনো রিসোর্সের মিডিয়া টাইপ রিকোয়েস্ট হেডারের Content-Type প্রপার্টিতে ঘোষিত হয় (ক্লায়েন্ট সাইডে, সার্ভারে রিকোয়েস্ট করার সময়) বা রেসপন্স হেডারে (সার্ভার সাইডে, রেসপন্স পাঠানোর সময়)।
নির্দিষ্টভাবে কন্টেন্ট টাইপ ঘোষণা না করলে, ক্লায়েন্ট চেষ্টা করতে পারে টাইপটি অটো-ডিটেক্ট করার, কিন্তু ফলাফল নিখুঁত নাও হতে পারে। এই কারণেই এটি স্পষ্টভাবে ঘোষণা করা গুরুত্বপূর্ণ।
মিডিয়া টাইপ
মিডিয়া টাইপ বিভিন্ন রূপে থাকে। এগুলো বিভিন্ন গ্রুপে ভাগ করা হয়েছে:
- application
- audio
- font
- example
- image
- message
- model
- multipart
- text
- এবং video
এই ক্যাটাগরিগুলোরও তাদের নিজস্ব টাইপ আছে। উদাহরণস্বরূপ, application/json হলো application ক্যাটাগরির অধীনে একটি টাইপ এবং text/html হলো text ক্যাটাগরির অধীনে একটি টাইপ।
আপনি IANA (ইন্টারনেটের কিছু মূল উপাদান সমন্বয়কারী সংস্থা) মিডিয়া টাইপে সম্পূর্ণ তালিকা পাবেন।
এই সব টাইপ ইন্টারনেট জুড়ে ব্যবহৃত টেক্সট, অডিও, ছবি, HTML, এবং আরও অনেক ডেটা টাইপ কভার করে।
ব্রাউজারকে রিসোর্সের মিডিয়া টাইপ জানতে হয়
যেইভাবে আমি উপরে বললাম, ব্রাউজারকে জানতে হয় সেটি কী টাইপের কন্টেন্ট পাচ্ছে। এখানে একটি উদাহরণ দিয়ে বুঝিয়ে দেওয়া হলো।
নিচের কোডটি একটি Node সার্ভার যা একটি HTML ফাইল সার্ভ করে:
const http = require("http"); const fs = require("fs"); const path = require("path"); const server = http.createServer(function (req, res) { const filePath = path.join(__dirname, "index.html"); var stat = fs.statSync(filePath); res.writeHead(200, { "Content-Type": "text/css", "Content-Length": stat.size, }); const readStream = fs.createReadStream(filePath); readStream.pipe(res); }); server.listen(5000); console.log("Node.js web server at port 5000 is running..");
কোডের বিস্তারিতের চিন্তা করবেন না। আপনি শুধু যে index.htm ফাইলটি সার্ভ করা হচ্ছে এবং Content-Type হলো text/css সেটি মনে রাখবেন।
এখানে index.html-র কন্টেন্ট:
<h1>Homepage</h1>
অবশ্যই, একটি HTML ডকুমেন্ট একটি CSS ফাইল থেকে ভিন্ন। সার্ভার শুরু হলে localhost:5000-এ ফলাফলটি:

আপনি DevTools-র নেটওয়ার্ক ট্যাবে হেডার চেক করে রেসপন্সটি কনফার্ম করতে পারেন।
Chrome ব্রাউজারে ফলাফল:

ব্রাউজার কন্টেন্টটিকে CSS টাইপ হিসেবে পেল, তাই সেটি এটি CSS হিসেবে চেষ্টা করল।
এছাড়া, ব্রাউজারকে প্রাপ্ত কন্টেন্টের টাইপ সম্পর্কে সম্পূর্ণ জ্ঞান থাকলে সিকিউরিটি ভালনারেবিলিটিও কমে যাবে কারণ ব্রাউজার সেই ডেটার জন্য সিকিউরিটি স্ট্যান্ডার্ড মেনে চলে।
এখন আপনি MIME টাইপ এবং তাদের গুরুত্ব বুঝতে পেরেছেন, চলুন JSON-এ যাই।
JSON-এর জন্য সঠিক Content-Type
JSON সঠিকভাবে ব্রাউজার দ্বারা ইন্টারপ্রেট হলে এটিকে উপযুক্তভাবে ব্যবহার করা যায়। text/plain সাধারণত JSON-এর জন্য ব্যবহার হতো, কিন্তু IANA অনুযায়ী, JSON-এর অফিসিয়াল MIME টাইপ হলো application/json।
এটি মানে যখন আপনি সার্ভারে JSON পাঠাচ্ছেন বা সার্ভার থেকে JSON পাচ্ছেন, আপনাকে সবসময় হেডারের Content-Type-কে application/json হিসেবে ঘোষণা করতে হবে কারণ এটি সেই স্ট্যান্ডার্ড যা ক্লায়েন্ট এবং সার্ভার বুঝে।
উপসংহার
উপরোক্তভাবে বলা হয়েছে, সার্ভার (ব্রাউজারের মতো) পাঠানো ডেটার টাইপ জানতে চায়, মনো POST রিকোয়েস্টে। তাই forms-এ ফাইল থাকলে সাধারণত enctype অ্যাট্রিবিউট থাকে যার মান multipart/form-data।
এভাবে রিকোয়েস্ট এনকোড না করলে, POST রিকোয়েস্ট কাজ করবে না। এছাড়া, একবার সার্ভার পাওয়া ডেটার টাইপ জানলে, সেটি জানতে পারে এনকোড করা ডেটাটি কীভাবে পার্স করতে হবে।
এই আর্টিকেলে, আমরা দেখেছি MIME টাইপ কী এবং তাদের উদ্দেশ্য। এছাড়া, আমরা JSON-এর অফিসিয়াল কন্টেন্ট টাইপ দেখেছি। আশা করি আপনি এখন জানতে পেরেছেন ইন্টারনেট জুড়ে ব্যবহার করার সময় রিসোর্স টাইপ ঘোষণা করা কেন গুরুত্বপূর্ণ।