MIME টাইপ

সাধারণ ফাইল এক্সটেনশন ও তাদের IANA MIME টাইপের একটি রেফারেন্স টেবিল অনুসন্ধান করুন, শীর্ষ-স্তরের বিভাগ দিয়ে ফিল্টার করে, প্রতিবার সঠিক Content-Type হেডার সেট করতে।

এই ফাইলটির জন্য কোন Content-Type হেডার প্রয়োজন? টেবিল ফিল্টার করতে .webp-এর মতো একটি এক্সটেনশন বা image-এর মতো একটি মিডিয়া টাইপের অংশ টাইপ করুন। প্রতিটি এন্ট্রি IANA মিডিয়া টাইপ রেজিস্ট্রি ও MDN সাধারণ টাইপ তালিকা অনুসরণ করে।

মিল
এক্সটেনশন MIME টাইপ

MIME টাইপ ব্রাউজারকে কী বলে

মিডিয়া টাইপের অ্যানাটমি

একটি MIME টাইপ - সঠিকভাবে মিডিয়া টাইপ বলা হয় - হলো সার্ভার একটি প্রতিক্রিয়ার সাথে সংযুক্ত করে এমন লেবেল যাতে ক্লায়েন্ট জানতে পারে পরের বাইটগুলো কীভাবে হ্যান্ডেল করতে হবে। এটির দুটি অংশ স্ল্যাশ দিয়ে বিচ্ছিন্ন: text, image, audio, video, font, model বা application-এর মতো একটি শীর্ষ-স্তরের টাইপ এবং নির্দিষ্ট ফরম্যাটের নাম দেওয়া একটি সাবটাইপ। image/pngapplication/json দুটোই সম্পূর্ণ মিডিয়া টাইপ; শুধু image নয়।

সাবটাইপ তাদের নিজস্ব প্রথা বহন করে। একটি অগ্রণী x- একসময় একটি পরীক্ষামূলক টাইপ চিহ্নিত করত, যেমন application/x-tar, এবং যদিও প্রথাটি অবচিত, টিকে থাকা নামগুলো পরিবর্তন করার জন্য যথেষ্ট ব্যাপকভাবে স্থাপিত। একটি ট্রেইলিং +suffix বলে ফরম্যাটটি আরও সাধারণ সিনট্যাক্সের উপর নির্মিত: image/svg+xml হলো XML, application/ld+json হলো JSON, এবং একটি পার্সার নির্দিষ্ট ফরম্যাট চিনতে না পারলে মৌলিক সিনট্যাক্সে ফিরে যেতে পারে।

কিছু টাইপ সেমিকোলনের পরে প্যারামিটার গ্রহণ করে। সবচেয়ে গুরুত্বপূর্ণ হলো charset, যেমন text/html; charset=utf-8। টেক্সট প্রতিক্রিয়ায় এটি বাদ দিলে ব্রাউজার এনকোডিং অনুমান করে, যা mojibake-এর একটি ক্লাসিক উৎস, তাই UTF-8 স্পষ্টভাবে ঘোষণা করা সবসময় অতিরিক্ত অক্ষরের মূল্য দেয়।

কেন হেডার এক্সটেনশনের চেয়ে বেশি গুরুত্বপূর্ণ

ব্রাউজাররা URL-এ ফাইলের নাম নয়, Content-Type হেডারের ভিত্তিতে একটি প্রতিক্রিয়া নিয়ে কী করবে তা নির্ধারণ করে। একটি PNG-কে text/plain হিসেবে পরিবেশন করা বাইনারি আবর্জনার একটি দেয়াল দেখায়; JSON-কে text/html হিসেবে পরিবেশন করা একটি fetch ক্লায়েন্টকে এটি প্রত্যাখ্যান করতে পারে। হেডারটি সঠিক করা-ই একটি ডাউনলোডকে সঠিক অ্যাপ্লিকেশনে খোলা এবং একটি ইনলাইন অ্যাসেটকে ডাউনলোডের বদলে রেন্ডার করা নিশ্চিত করে।

অসামঞ্জস্যের নিরাপত্তা পরিণতিও আছে। পুরোনো ব্রাউজার MIME স্নিফিং অনুশীলন করত, একটি প্রতিক্রিয়ার প্রথম বাইট পরীক্ষা করে তারা ভুল মনে করা একটি হেডারকে অগ্রাহ্য করত। HTML-এর মতো দেখতে একটি ফাইল আপলোড করতে পারা আক্রমণকারী সাইটের উৎসে এটি কার্যকর করাতে পারত এমনকি যখন সার্ভার এটিকে একটি ছবি হিসেবে লেবেল করত। X-Content-Type-Options: nosniff হেডার সেই আচরণ নিষ্ক্রিয় করে এবং এখন ব্যবহারকারী-আপলোড করা কন্টেন্ট পরিবেশন করে এমন যেকোনো এন্ডপয়েন্টে মানক অনুশীলন।

ডাউনলোডের জন্য, মিডিয়া টাইপের সাথে Content-Disposition: attachment; filename="report.pdf" জোড়া দিন। মিডিয়া টাইপ বর্ণনা করে বাইটগুলো কী, disposition বর্ণনা করে ব্রাউজার সেগুলোর সাথে কী করা উচিত, এবং দুটি ভিন্ন প্রশ্নের উত্তর দেয়।

ম্যাপিং আসলে কোথায় থাকে

কোনো একক প্রামাণিক এক্সটেনশন-থেকে-টাইপ টেবিল নেই, যা মানুষকে অবাক করে। IANA মিডিয়া টাইপ নিজেরাই নিবন্ধন করে, কিন্তু ফাইল এক্সটেনশন থেকে টাইপের ম্যাপিং প্রতিটি সার্ভার রক্ষণাবেক্ষণ করা একটি স্থানীয় প্রথা। Apache mime.types পড়ে, nginx-এর নিজস্ব mime.types ফাইল আছে, এবং অ্যাপ্লিকেশন ফ্রেমওয়ার্ক তাদের নিজস্ব লুকআপ টেবিল পাঠায়। এ কারণেই একই .wasm ফাইল একটি সার্ভার সঠিকভাবে এবং অন্যটি application/octet-stream হিসেবে পরিবেশন করতে পারে যেটি আপডেট করা হয়নি।

application/octet-stream হলো "আবশ্যকীয় বাইনারি ডেটা" অর্থের সাধারণ ফলব্যাক। ফরম্যাটটি সত্যিই অজানা হলে এটি সৎ উত্তর, তবে এটি ইনলাইন রেন্ডারিংকে ব্যর্থ করে, তাই আপনার সাইট নিয়মিত পরিবেশন করে এমন যেকোনো ফরম্যাটের জন্য একটি স্পষ্ট ম্যাপিং যোগ করা মূল্যবান। AVIF, JXL ও WebAssembly-এর মতো নতুন ফরম্যাটগুলো পুরোনো সার্ভার কনফিগারেশনে প্রায়ই অনুপস্থিত থাকে।

ওপেন-সোর্স নোট: তৃতীয়-পক্ষের কোনো লাইব্রেরি ছাড়া ভ্যানিলা JavaScript-এ বাস্তবায়িত।

FAQ

আমার ফাইলটি প্রদর্শনের বদলে ডাউনলোড হচ্ছে কেন?
হয় মিডিয়া টাইপটি `application/octet-stream` অথবা প্রতিক্রিয়াটি `Content-Disposition: attachment` বহন করে। ইনলাইন রেন্ডার করতে সঠিক টাইপ সেট করুন এবং attachment disposition বাদ দিন।
JSON-এর MIME টাইপ কী?
`application/json`। পুরোনো কোড কখনও কখনও `text/json` বা `application/x-json` ব্যবহার করত, তবে দুটোই নিবন্ধিত নয় এবং কিছু ক্লায়েন্ট সেগুলো প্রত্যাখ্যান করে।
JavaScript কি text/javascript নাকি application/javascript হওয়া উচিত?
`text/javascript` বর্তমানে প্রস্তাবিত রূপ। দুটোই প্রতিটি ব্রাউজারে কাজ করে, তবে HTML স্পেসিফিকেশন text ভেরিয়েন্টে স্থির হয়েছে এবং application ফর্মটিকে অপ্রচলিত হিসেবে তালিকাভুক্ত করেছে।
আমার কি charset অন্তর্ভুক্ত করা দরকার?
টেক্সটুয়াল টাইপের জন্য, হ্যাঁ। এটি ছাড়া ব্রাউজার অনুমান করে, যা অ-ASCII কন্টেন্টের জন্য mojibake উৎপন্ন করে। `text/html; charset=utf-8` বা আপনার টাইপের সমতুল্য পাঠান।
+xml বা +json সাফিক্সের অর্থ কী?
ফরম্যাটটি আরও সাধারণ সিনট্যাক্সের উপর নির্মিত। যে ক্লায়েন্ট `application/ld+json` নির্দিষ্টভাবে জানে না সে এটি এখনও JSON হিসেবে পার্স করতে পারে, যা সাধারণ টুলিং সম্ভব করে।
.webp বা .avif-এর জন্য আমার সার্ভার কেন ভুল টাইপ পাঠায়?
সেই সার্ভারের `mime.types` ফাইলে এক্সটেনশনটি অনুপস্থিত। সার্ভার কনফিগারেশনে একটি স্পষ্ট ম্যাপিং যোগ করুন; ফাইলটি নিজেই ঠিক আছে এবং কোনো পরিবর্তনের প্রয়োজন নেই।