أنواع MIME الشائعة
تعتمد عليها الخوادم ونماذج الرفع؛ فالنوع الخاطئ قد يعطب المعاينة أو التنزيل أو سياسة أمان المحتوى.
| الفئة | نوع MIME | الامتداد المعتاد |
|---|---|---|
| HTML | text/html | .html |
| CSS | text/css | .css |
| JavaScript | text/javascript | .js |
| JSON | application/json | .json |
| XML | application/xml | .xml |
| نص عادي | text/plain | .txt |
| CSV | text/csv | .csv |
| application/pdf | ||
| ZIP | application/zip | .zip |
| PNG | image/png | .png |
| JPEG | image/jpeg | .jpg |
| GIF | image/gif | .gif |
| WebP | image/webp | .webp |
| SVG | image/svg+xml | .svg |
| ICO | image/x-icon | .ico |
| MP3 | audio/mpeg | .mp3 |
| WAV | audio/wav | .wav |
| MP4 | video/mp4 | .mp4 |
| WebM | video/webm | .webm |
| WOFF2 | font/woff2 | .woff2 |
| نموذج بترميز URL | application/x-www-form-urlencoded | — |
| نموذج متعدد الأجزاء | multipart/form-data | — |
ملاحظات
- بعض المتصفحات تفحص المحتوى تخمينًا، لكن على الخادم مع ذلك إرسال النوع الصحيح.
- النوع الرسمي لجافاسكربت هو text/javascript (أُهمل application/javascript).
ما يتحكم فيه نوع MIME فعلياً
نوع MIME هو الوصلة التي يلصقها الخادم بالاستجابة ليخبر المتصفح طبيعة البايتات. ففي حين أن text/html يعرض صفحة، وapplication/pdf يفتح قارئاً، وimage/svg+xml يمكن رسمه مضموناً في الصفحة، فإن application/octet-stream يحفز ظهور مربع حوار تنزيل. يمكن لملفين متشابهين ظاهرياً أن يتصرفا بشكل مختلف تماماً بناءً على هذا العنوان الواحد. يقرأه المتصفحات ونماذج الرفع وعملاء البريد وقواعد أمان المحتوى، لذا فإن الخطأ فيه سبب شائع لانهيار المعاينات وإجبار التنزيل وحظر السكريبتات.
حيث ينطبق use text/ و application/ اليوم
كانت النصائح القديمة تقول إن JavaScript هو application/javascript؛ والمعيار الحالي هو text/javascript وأصبح application/javascript عتيقاً. CSS هو text/css، وHTML هو text/html، والنص العادي هو text/plain، وCSV هو text/csv — كلها من فئة text/* لأنها صممت لتكون قابلة للقراءة البشرية. الصيغ المهيكلة هي application/*: application/json، application/xml,application/pdf، application/zip. والاستثناء البارز هو SVG، فهو XML لكن يجب تقديمه كـ image/svg+xml كي يرسمه المتصفح بدلاً من تنزيله.
الأنواع الخاطئة تعطل الرفع والأمان
الرفع المُوسَم بصورة خاطئة مصدر كلاسيكي للقرود: فقد ترفض عميل API ملف JSON مقدم كـ text/plain، وقد يُنزَّل صورة مُسَناة كـ octet-stream عوض عرضها، ويحظر المتصفح سكريبت مقدم كـ text/html. قواعد Content-Security-Policy الصارمة ترتبط بنوع MIME، لذا يمكن رفض ورقة الأنماط المقدم بنوع خاطئ رفضاً باتاً. وعندما تتصرف المعاينة أو التنزيل بشكل غريب، فإن فحص Content-Type للاستجابة هو عادةً أسرع تشخيص.
ترميز الأحرف والتعرف التلقائي على المحتوى
لأنواع text، اجمع نوع MIME مع ترميز الأحرف — text/html; charset=utf-8 و application/json; charset=utf-8 هما الافتراضي الآمن لأي محتوى متعدد اللغات. كانت المتصفحات القديمة تستخدم التعرف التلقائي على المحتوى لتخمين النوع من بايتات الملف، وهو ما استغله المهاجمون؛ وإرسال X-Content-Type-Options: nosniff يخبر المتصفح بالثقة بالنوع المُعلن بدلاً من ذلك. أرسل دائماً Content-Type صريحاً وصحيحاً بدلاً من الاعتماد على امتداد الملف الذي لا يراه المتصفح أصلاً.
تحديد أنواع المحتوى في الخادم والنماذج
مصدر النوع مهم. ترابط الاستضافة الثابتة الامتدادات تلقائياً، لكن أطر العمل على الويب غالباً تحتاج ضبط النوع صراحة — في Express مع res.type('json')، وفي Nginx عبر block الأنواع، وفي Cloudflare Pages عبر الرؤوس أو امتداد الملف. تستخدم نماذج HTML enctype للتحكم في ترميز الرفع: multipart/form-data للملفات و application/x-www-form-urlencoded للحقول النصية، بينما ترسل API يتوقع JSON application/json. إرسال النوع الخاطئ مصدر هادئ لردود 415 Unsupported Media Type و 400 التي تبدو غامضة حتى تفحص رأس الطلب.
عائلات أخرى تستحق التعرف عليها
بعيداً عن صيغ الويب اليومية، هناك عدد من العائلات يستحق التعرف عليها. الخطوط تستخدم font/woff2 و font/ttf. وتنقسم الصور حسب الصيغة — image/jpeg، image/png، image/webp، image/avif، image/gif — بينما يستخدم الصوت والفيديو audio/mpeg، audio/ogg، video/mp4 و video/webm. الأرشيفات والكتل الثنائية هي application/zip، application/gzip و application/octet-stream. عندما يعيد API ملفاً لا يستطيع التعرف عليه، يكون octet-stream الجواب الصادق: فهو يفرض على العميل التنزيل عوض التخمين، وهو السلوك الذي تريده بالضبط عندما تكون المحتويات غير معروفة.
الأسئلة الشائعة
- ما نوع MIME المناسب لملف .json؟
- استخدم application/json لملفات JSON واستجابات واجهات البرمجة، وهو النوع القياسي ويُفضَّل إرساله بترميز UTF-8.
- ما نوع MIME لملفات .js؟
- النوع الرسمي لجافاسكربت هو text/javascript، أما application/javascript القديم فقد أُهمل ولا ينبغي استخدامه.
- ما نوع MIME لصورة SVG؟
- ملفات SVG تستخدم image/svg+xml، وبدون هذا النوع لن تعرضها المتصفحات داخل الصفحة.