ما هو نوع MIME في الواقع
نوع MIME، ويُسمى أيضًا نوع الوسائط، هو علامة قصيرة تخبر البرامج بنوع البيانات التي يحتويها ملف أو جسم رسالة. وقد وُلد في البريد الإلكتروني (يرمز الاسم إلى امتدادات بريد الإنترنت متعددة الأغراض)، لكنه اليوم يظهر في كل مكان على الويب. والصيغة دائمًا type/subtype: فئة عريضة، وشرطة مائلة، وصيغة محددة. فـ text/html تعني "نص، في صورة HTML"، وimage/png تعني "صورة، في صورة PNG"، وapplication/json تعني "بيانات تطبيق، مُرمَّزة بصيغة JSON".
تأتي الفئة من المستوى الأعلى من مجموعة ثابتة تحافظ عليها هيئة IANA، السجل الرسمي: text وimage وaudio وvideo وapplication وfont وmodel وmultipart، وبعض الفئات الأحدث مثل haptics. أما النوع الفرعي فهو الصيغة المحددة. ويمكن للبائعين إضافة أنواعهم الخاصة ببادئة vnd. (مثل application/vnd.ms-excel)، وكانت الأنواع التجريبية تستخدم تاريخيًا بادئة x-، رغم أن هذا العُرف بات مُثبَّطًا الآن.

أين تهم أنواع MIME
أهم مكان يظهر فيه نوع MIME على الإطلاق هو ترويسة استجابة HTTP المسماة Content-Type. فحين يرسل الخادم صفحة أو صورة أو حمولة من واجهة برمجة تطبيقات، تخبر هذه الترويسة المتصفح بكيفية تفسير البايتات. فإذا قالت الترويسة text/html، يعرض المتصفح الترميز؛ وإذا قالت application/json، يستطيع استدعاء fetch() تحليلها؛ وإذا قالت application/pdf، يُفتح العارض المدمج. وتنتقل الترويسة نفسها في جانب الطلب أيضًا: فحين ترسل نموذجًا أو جسم واجهة برمجة تطبيقات بطريقة POST، تخبر Content-Type الخادم بكيفية قراءة ما أرسلته.
وفيما يتجاوز HTTP، تشغّل أنواع MIME عدة أنظمة أخرى. فبرامج البريد الإلكتروني تستخدمها لتقرر ما إذا كان المرفق صورة لمعاينتها أو ملفًا ثنائيًا لحفظه. ومعالجات رفع الملفات تفحص النوع المعلن لقبول الملفات أو رفضها. ويستخدم نظام التشغيل أو المتصفح النوع، لا مجرد امتداد الملف، لاختيار التطبيق الافتراضي. والفكرة نفسها هي أساس كيفية إبلاغ الخوادم عن النتائج والأخطاء جنبًا إلى جنب مع رموز حالة HTTP — فاستجابة 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 أيضًا — إذ توجب المواصفة استخدام UTF-8، لذا فإن كتابة application/json; charset=utf-8 زائدة عن الحاجة وإن كانت غير ضارة. وللاطلاع على جدول أوفى للصيغ والامتدادات، راجع الجداول المرجعية لدينا.

لماذا يعطّل نوع Content-Type الخاطئ الأمور
تثق المتصفحات والبرامج بالنوع المعلن، لذا فإن الخطأ فيه يخلّف عواقب ملموسة. فإذا قدّمت استجابة واجهة برمجة تطبيقات بصيغة JSON على أنها text/html، فقد يحاول المتصفح عرضها، أو قد يطلق برنامج صارم خطأ تحليل قبل أن يعمل الكود لديك أصلًا. وإذا قدّمت ملف CSS أو JavaScript بنوع خاطئ، فإن ميزة أمان تُسمى X-Content-Type-Options: nosniff ستجعل المتصفح يرفض تطبيقه، فيعطّل تنسيق صفحتك أو نصوصها البرمجية بصمت.
التنزيلات هي الإخفاق الكلاسيكي الآخر. فإذا أردت تنزيل ملف بدلًا من عرضه، فإن النوع يهم جنبًا إلى جنب مع ترويسة Content-Disposition. فملف PDF المُرسل بصيغة application/octet-stream يُنزَّل كملف عام بدلًا من فتحه في العارض؛ وصورة مُرسلة بصيغة text/plain تظهر كأحرف غير مفهومة. وفي جانب الرفع، يمكن لملف مُعنون خطأً أن يمرّ من فحص امتداد ساذج، ولهذا تفحص أدوات التحقق المتينة البايتات الحقيقية ("الرقم السحري") بدلًا من الوثوق بالنوع الذي يوفّره العميل.
تاريخيًا، كانت المتصفحات تحاول تخمين، أو "استشعار"، النوع الحقيقي حين تبدو الترويسة خاطئة. وقد تسبّب هذا السلوك في ثغرات أمنية، لذا فإن أفضل ممارسة حديثة هي إرسال Content-Type دقيق دائمًا وتعطيل الاستشعار بـ nosniff. وباختصار: اضبط النوع عمدًا في كل استجابة، فتختفي معظم أخطاء العرض والتنزيل والتحليل.
الأسئلة الشائعة
ما الفرق بين نوع MIME ونوع الوسائط؟
إنهما الشيء نفسه. "نوع MIME" هو الاسم الأقدم من البريد الإلكتروني، بينما "نوع الوسائط" هو المصطلح الذي تفضّله IANA ومواصفات HTTP الحديثة. وكلاهما يشير إلى علامة النوع/النوع الفرعي.
ما نوع MIME الصحيح لـ JSON؟
إنه application/json، المعرّف في RFC 8259. والبدائل الأقدم مثل text/json أو application/x-javascript مهجورة وسيرفضها بعض البرامج.
ماذا يعني application/octet-stream؟
إنه النوع العام للبيانات الثنائية الاعتباطية التي لا علامة أكثر تحديدًا لها. وتستخدمه الخوادم كخيار احتياطي لأنواع الملفات المجهولة، ما يطلق عادةً تنزيلًا بدلًا من العرض داخل المتصفح.
لماذا لا يُحمَّل ملف CSS أو JavaScript لدي؟
غالبًا يرسله الخادم بنوع Content-Type خاطئ. وبضبط X-Content-Type-Options على nosniff، يرفض المتصفح تطبيق CSS التي ليست text/css أو النصوص البرمجية التي ليست من نوع JavaScript. صحّح إعداد الخادم كي يُرسَل النوع الصحيح.
هل يمكنني إضافة ترميز أحرف إلى نوع MIME؟
نعم، للصيغ النصية، باستخدام معامل مثل text/html; charset=utf-8. أما بالنسبة لـ JSON فهو غير ضروري لأن الصيغة دائمًا UTF-8 بحكم المواصفة، وإن كانت إضافته لا تضر.
هل يحدّد امتداد الملف نوع MIME؟
ليس عبر HTTP. فالخادم يقرر أي Content-Type يرسل، والمتصفح يثق بتلك الترويسة. ولا يعمل الامتداد إلا كتلميح للأدوات وأنظمة التشغيل حين لا يُوفَّر نوع صريح.
