← সব টুল

MIME টাইপ রেফারেন্স

MIME টাইপ কী, type/subtype ফরম্যাট কীভাবে কাজ করে, HTTP ও ইমেইলে Content-Type কোথায় গুরুত্বপূর্ণ, সাধারণ টাইপ এবং ভুল টাইপ কেন সমস্যা করে।
এক্সটেনশনMIME টাইপ

MIME টাইপ আসলে কী

MIME টাইপ, যাকে মিডিয়া টাইপও বলা হয়, একটি সংক্ষিপ্ত লেবেল যা সফটওয়্যারকে বলে দেয় একটি ফাইল বা মেসেজ বডিতে কী ধরনের ডেটা আছে। এর জন্ম হয়েছিল ইমেইলে (নামটি এসেছে Multipurpose Internet Mail Extensions থেকে) কিন্তু আজ এটি ওয়েবের সর্বত্র দেখা যায়। ফরম্যাট সবসময় type/subtype: একটি বিস্তৃত ক্যাটাগরি, একটি স্ল্যাশ, এবং একটি নির্দিষ্ট ফরম্যাট। তাই text/html মানে "টেক্সট, HTML রূপে", image/png মানে "ছবি, PNG রূপে", আর application/json মানে "অ্যাপ্লিকেশন ডেটা, JSON হিসেবে এনকোড করা"।

উপরের স্তরের type IANA দ্বারা পরিচালিত একটি নির্দিষ্ট সেট থেকে আসে, যা অফিসিয়াল রেজিস্ট্রি: text, image, audio, video, application, font, model, multipart, এবং haptics-এর মতো কিছু নতুন। subtype হলো নির্দিষ্ট ফরম্যাট। বিক্রেতারা vnd. প্রিফিক্স দিয়ে নিজেদেরটা যোগ করতে পারেন (যেমন application/vnd.ms-excel), আর পরীক্ষামূলক টাইপ ঐতিহাসিকভাবে x- প্রিফিক্স ব্যবহার করত, যদিও এই প্রথা এখন নিরুৎসাহিত করা হয়।

একটি গাঢ় নীল-বেগুনি পটভূমিতে লেবেলযুক্ত ক্যাটাগরি টাইলে সাজানো বিমূর্ত উজ্জ্বল ফাইল-ফরম্যাট আইকন
প্রতিটি ফাইল ফরম্যাট একটি type/subtype লেবেলের সাথে ম্যাপ হয়।

MIME টাইপ কোথায় গুরুত্বপূর্ণ

MIME টাইপ যেখানে সবচেয়ে গুরুত্বপূর্ণভাবে দেখা যায় তা হলো HTTP Content-Type রেসপন্স হেডার। যখন একটি সার্ভার একটি পৃষ্ঠা, ছবি বা API পেলোড পাঠায়, এই হেডার ব্রাউজারকে বলে দেয় বাইটগুলো কীভাবে ব্যাখ্যা করতে হবে। হেডারে text/html বলা থাকলে ব্রাউজার মার্কআপ রেন্ডার করে; application/json বলা থাকলে একটি fetch() কল সেটি পার্স করতে পারে; application/pdf বলা থাকলে বিল্ট-ইন ভিউয়ার খোলে। একই হেডার রিকোয়েস্টের দিকেও যায়: আপনি যখন একটি ফর্ম বা API বডি POST করেন, Content-Type সার্ভারকে বলে দেয় আপনি যা পাঠিয়েছেন তা কীভাবে পড়তে হবে।

HTTP-এর বাইরেও, MIME টাইপ আরও বেশ কিছু সিস্টেম চালায়। ইমেইল ক্লায়েন্ট এগুলো ব্যবহার করে সিদ্ধান্ত নেয় একটি অ্যাটাচমেন্ট প্রিভিউ করার মতো একটি ছবি নাকি সংরক্ষণ করার মতো একটি বাইনারি। ফাইল-আপলোড হ্যান্ডলার ঘোষিত টাইপ পরীক্ষা করে ফাইল গ্রহণ বা প্রত্যাখ্যান করে। আর অপারেটিং সিস্টেম বা ব্রাউজার শুধু ফাইল এক্সটেনশন নয়, টাইপ ব্যবহার করে একটি ডিফল্ট অ্যাপ্লিকেশন বেছে নিতে। একই ধারণা HTTP status codes-এর পাশাপাশি সার্ভার কীভাবে ফলাফল ও ত্রুটি রিপোর্ট করে তার ভিত্তি — ভুল টাইপ সহ একটি 200 রেসপন্স একটি 404-এর মতোই ভাঙা হতে পারে।

যেগুলো আপনি প্রতিদিন ব্যবহার করবেন

বাস্তব ট্র্যাফিকের সিংহভাগ কয়েকটি টাইপ দিয়েই কভার হয়:

  • text/html — ওয়েব পৃষ্ঠা (এক্সটেনশন .html)
  • text/css — স্টাইলশিট (.css)
  • text/javascript — JavaScript-এর জন্য সুপারিশকৃত টাইপ (.js, .mjs)
  • application/json — একমাত্র অফিসিয়াল JSON টাইপ, RFC 8259-এ সংজ্ঞায়িত (.json)
  • image/png, image/jpeg, image/webp, image/svg+xml — সাধারণ ছবির ফরম্যাট
  • application/pdf — PDF ডকুমেন্ট (.pdf)
  • application/octet-stream — অজানা বা যথেচ্ছ বাইনারি ডেটার জন্য ক্যাচ-অল
  • text/plain — সাদামাটা টেক্সটের জন্য ডিফল্ট যার কোনো সমৃদ্ধতর টাইপ নেই

JSON একটি নোট প্রাপ্য কারণ এটি মানুষকে বিভ্রান্ত করে। একমাত্র সঠিক টাইপ হলো application/json। পুরনো কোড কখনো কখনো text/json, text/plain, বা application/x-javascript ব্যবহার করত, কিন্তু এগুলো অপ্রচলিত এবং কিছু ক্লায়েন্ট এগুলো পার্স করতে অস্বীকার করবে। JSON-এর জন্য কোনো charset প্যারামিটারও নেই — স্পেক UTF-8 বাধ্যতামূলক করে, তাই application/json; charset=utf-8 লেখা অপ্রয়োজনীয় হলেও ক্ষতিকর নয়। ফরম্যাট ও এক্সটেনশনের একটি সম্পূর্ণ টেবিলের জন্য, আমাদের reference tables দেখুন।

একটি নেটওয়ার্ক সংযোগে প্রবাহিত একটি বিমূর্ত টাইপ ব্যাজ দিয়ে ট্যাগ করা উজ্জ্বল ডেটা প্যাকেট
Content-Type পেলোডের সাথে HTTP-এর মাধ্যমে ভ্রমণ করে।

ভুল Content-Type কেন সবকিছু ভাঙে

ব্রাউজার ও ক্লায়েন্ট ঘোষিত টাইপকে বিশ্বাস করে, তাই এটি ভুল হলে বাস্তব পরিণতি হয়। একটি JSON API রেসপন্স text/html হিসেবে পরিবেশন করুন এবং ব্রাউজার হয়তো সেটি রেন্ডার করার চেষ্টা করবে, অথবা একটি কঠোর ক্লায়েন্ট আপনার কোড চলার আগেই একটি পার্স এরর ছুঁড়ে দিতে পারে। একটি CSS বা JavaScript ফাইল ভুল টাইপ দিয়ে পরিবেশন করুন আর X-Content-Type-Options: nosniff নামের একটি নিরাপত্তা ফিচার ব্রাউজারকে সেটি প্রয়োগ করতে অস্বীকার করাবে, নীরবে আপনার পৃষ্ঠার স্টাইলিং বা স্ক্রিপ্ট ভেঙে দেবে।

ডাউনলোড অন্য একটি ক্লাসিক ব্যর্থতা। আপনি যদি চান একটি ফাইল প্রদর্শনের বদলে ডাউনলোড হোক, তাহলে Content-Disposition হেডারের পাশাপাশি টাইপও গুরুত্বপূর্ণ। একটি PDF application/octet-stream হিসেবে পাঠানো হলে ভিউয়ারে খোলার বদলে একটি সাধারণ ফাইল হিসেবে ডাউনলোড হয়; একটি ছবি text/plain হিসেবে পাঠানো হলে অর্থহীন অক্ষর হিসেবে দেখা যায়। আপলোডের দিকে, একটি ভুল-লেবেলযুক্ত ফাইল একটি সরল এক্সটেনশন চেক পার হয়ে যেতে পারে, যে কারণে শক্তিশালী ভ্যালিডেটর ক্লায়েন্ট-সরবরাহকৃত টাইপে বিশ্বাস করার বদলে প্রকৃত বাইট ("ম্যাজিক নাম্বার") পরীক্ষা করে।

ঐতিহাসিকভাবে, ব্রাউজার হেডার ভুল মনে হলে প্রকৃত টাইপ অনুমান করার, বা "স্নিফিং" করার চেষ্টা করত। সেই আচরণ নিরাপত্তা ত্রুটির কারণ হয়ে দাঁড়াত, তাই আধুনিক সেরা অনুশীলন হলো সবসময় একটি সঠিক Content-Type পাঠানো এবং nosniff দিয়ে স্নিফিং নিষ্ক্রিয় করা। সংক্ষিপ্ত সংস্করণ: প্রতিটি রেসপন্সে ইচ্ছাকৃতভাবে টাইপ সেট করুন, এবং বেশিরভাগ রেন্ডারিং, ডাউনলোড ও পার্সিং বাগ অদৃশ্য হয়ে যায়।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

MIME টাইপ ও মিডিয়া টাইপের মধ্যে পার্থক্য কী?

এগুলো একই জিনিস। "MIME টাইপ" ইমেইল থেকে আসা পুরনো নাম, আর "মিডিয়া টাইপ" IANA ও আধুনিক HTTP স্পেসিফিকেশন পছন্দ করে এমন শব্দ। দুটোই type/subtype লেবেলকে বোঝায়।

JSON-এর জন্য সঠিক MIME টাইপ কী?

এটি application/json, RFC 8259-এ সংজ্ঞায়িত। text/json বা application/x-javascript-এর মতো পুরনো বিকল্প অপ্রচলিত এবং কিছু ক্লায়েন্ট এগুলো প্রত্যাখ্যান করবে।

application/octet-stream মানে কী?

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

আমার CSS বা JavaScript ফাইল কেন লোড হয় না?

প্রায়ই সার্ভার এটি ভুল Content-Type সহ পাঠায়। X-Content-Type-Options nosniff-এ সেট থাকলে, ব্রাউজার text/css নয় এমন CSS বা JavaScript টাইপ নয় এমন স্ক্রিপ্ট প্রয়োগ করতে অস্বীকার করে। সঠিক টাইপ পাঠানো হয় তা নিশ্চিত করতে সার্ভার কনফিগারেশন ঠিক করুন।

আমি কি একটি MIME টাইপে charset যোগ করতে পারি?

হ্যাঁ, টেক্সট ফরম্যাটের জন্য, text/html; charset=utf-8-এর মতো একটি প্যারামিটার ব্যবহার করে। JSON-এর জন্য এটি অপ্রয়োজনীয় কারণ ফরম্যাট স্পেসিফিকেশন অনুযায়ী সবসময় UTF-8, যদিও এটি যোগ করলে কোনো ক্ষতি হয় না।

ফাইল এক্সটেনশন কি MIME টাইপ নির্ধারণ করে?

HTTP-এর ক্ষেত্রে না। সার্ভার সিদ্ধান্ত নেয় কোন Content-Type পাঠাতে হবে, আর ব্রাউজার সেই হেডারকে বিশ্বাস করে। এক্সটেনশন শুধুমাত্র টুল ও অপারেটিং সিস্টেমের জন্য একটি ইঙ্গিত হিসেবে কাজ করে যখন কোনো স্পষ্ট টাইপ দেওয়া হয় না।