415 Unsupported Media Type: صيغة جسم الطلب خاطئة

415 Unsupported Media Type يعني أن الخادم يرفض جسم الطلب بسبب صيغته، وغالبًا لغياب ترويسة Content-Type أو خطئها.

افحص رمز حالة رابط

415 Unsupported Media Type يعني أن الخادم لن يقبل جسم الطلب بسبب صيغته. فقد أرسلت بيانات نموذج إلى نقطة تتوقع JSON، أو نسيت ترويسة Content-Type، أو استخدمت ضغطًا لا يستطيع الخادم فك تشفيره.

التعريف

يقول RFC 9110، القسم 15.5.16 إن المشكلة قد تأتي من Content-Type الطلب، أو من Content-Encoding، أو من فحص الخادم للبيانات مباشرة. وعندما يكون السبب ترميز محتوى غير مدعوم، ينبغي أن يتضمن الرد ترويسة Accept-Encoding تسرد الترميزات التي يقبلها. أما مع PATCH فيعرّف RFC 5789 الترويسة Accept-Patch لسرد صيغ التصحيح المدعومة.

لا تخلطه مع 406 Not Acceptable: الرمز 415 يخص ما يرسله العميل، و406 يخص ما هو مستعد لاستقباله.

الأسباب الشائعة

  • Content-Type مفقود أو خاطئ، مثل application/x-www-form-urlencoded أو text/plain أُرسل إلى واجهة JSON. وتردّ أطر مثل Spring وASP.NET Core على ذلك بـ 415.
  • رفع ملف من نوع لا تقبله نقطة الاستقبال.
  • جسم طلب مضغوط بـ gzip أُرسل إلى خادم لا يفك ضغط الطلبات.
  • استدعاءات fetch() في JavaScript التي ترسل JSON.stringify(data) دون ضبط الترويسة، فيخرج الجسم بالنوع text/plain.

كيف تصلحه

# curl: صرّح بأن الجسم JSON
curl -X POST https://api.example.com/v1/contacts \
  -H 'Content-Type: application/json' \
  -d '{"email":"sara@example.com"}'

// fetch()
fetch('/api/v1/contacts', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email: 'sara@example.com' })
});

وعلى الخادم، أعد رسالة تسمّي الأنواع المقبولة ليتمكن المتكاملون من إصلاح استدعائهم بسرعة.

التأثير على السيو

لا ترسل الزواحف أجسام طلبات، فلا أثر مباشر للرمز 415 على الفهرسة. لكنه يظهر في عمل السيو عبر واجهات API: فإرسال الروابط إلى IndexNow بـ POST، مثلًا، يحتاج جسم JSON مع الترويسة الصحيحة، وهذا ما تتولاه أداة إرسال IndexNow نيابةً عنك. وإذا أعادت صفحة عادية الرمز 415 لطلب GET، فهو خطأ في الخادم؛ وستعدّه Google رمز 4xx وتُسقط الصفحة. افحص صفحاتك بـ أداة فحص حالة HTTP.

مثال

POST /api/v1/contacts HTTP/1.1
Host: api.example.com
Content-Type: text/plain

email=sara@example.com

HTTP/1.1 415 Unsupported Media Type
Content-Type: application/json

{"error":"Expected Content-Type: application/json"}

الأسئلة الشائعة

ما الفرق بين 415 و400؟

الرمز 400 عام ويعني «هذا الطلب مشوه». أما 415 فمحدد: لا يستطيع الخادم التعامل مع صيغة الجسم الذي أرسلته، وغالبًا بسبب ترويسة Content-Type.

كيف أصلح الخطأ 415 في fetch أو Postman؟

اضبط ترويسة Content-Type لتطابق الجسم، وغالبًا application/json للبيانات بصيغة JSON، وتأكد أن الجسم فعلًا بتلك الصيغة.

هل يؤثر الخطأ 415 على السيو؟

ليس مباشرة، لأن الزواحف لا ترسل جسم طلب. وهو مهم في العمل مع واجهات API مثل أدوات إرسال الروابط، كما أن الصفحة التي تعيد 415 لطلب GET ستُسقط كأي صفحة 4xx.