استجابة الخادم 304 Not Modified
HTTP статус-код 304 (غير معدّل)
HTTP статус-код 304 يُشير إلى أن المورد المطلوب لم يتغير منذ آخر طلب للعميل. هذا الكود يُستخدم بشكل أساسي لتحسين أداء الكاش، مما يسمح بتجنب نقل البيانات التي لم تتغير.
الخصائص الأساسية لرمز الحالة 304
- التعريف والغرض: يُستخدم رمز الحالة 304 لإعلام العميل بأن النسخة المخزنة محليًا من المورد ما زالت صالحة، مما يقلل من الحاجة لتحميل البيانات من الخادم مرة أخرى.
- آلية عمل الكاش باستخدام 304: يعتمد الكاش على تذاكر "If-Modified-Since" و "If-None-Match" التي يرسلها العميل للتحقق مما إذا كان المورد قد تم تحديثه.
- الشروط التي بموجبها يُرجع الخادم الحالة 304: يُرجع الخادم الحالة 304 عندما يتلقى طلبًا يحتوي على تذاكر تحقق صحيحة، ويكون المورد بنفس المحتوى كما كان عند آخر طلب.
أمثلة عملية على استخدام رمز الحالة 304
- مثال على كاش الصور على موقع ويب:
- كيف يحفظ المتصفح الكاش: عند تحميل صورة، يقوم المتصفح بتخزينها محليًا مع معلومات عن تاريخ التعديل.
- السلوك عند الطلب المتكرر: عند إعادة تحميل الصفحة، يُرسل المتصفح تذكرة تحقق، وإذا لم يتغير المورد، يُرجع الخادم الحالة 304.
- مثال على واجهات برمجة التطبيقات:
- يمكن استخدام رمز 304 لتقليل عدد البيانات التي يتم نقلها بين العميل والخادم، مما يُحسن الأداء.
- مثال على تذاكر If-Modified-Since و If-None-Match:
- تعمل هذه التذاكر على تحديد ما إذا كان المورد قد تم تحديثه أم لا، مما يُتيح للخادم إرجاع الحالة 304 إذا كان المحتوى نفسه.
كيفية إصلاح مشكلات رمز 304 بلغات البرمجة المختلفة
- PHP:
- لتحديد تذاكر الكاش بشكل صحيح:
- مثال على الكود لمعالجة الطلبات وإرجاع الحالة 304:
header("HTTP/1.1 304 Not Modified");
- تكوين الكاش ومعالجة الحالة 304:
- مثال على الكود للتحقق من شروط الكاش:
from flask import Flask, request, make_response @app.route('/resource') def resource(): response = make_response() response.headers['Last-Modified'] = 'Tue, 01 Jan 2023 00:00:00 GMT' if request.headers.get('If-Modified-Since') == response.headers['Last-Modified']: return '', 304 return response
- معالجة الطلبات باستخدام رمز 304:
- مثال على الكود للعمل مع تذاكر If-Modified-Since:
app.get('/resource', (req, res) => { const lastModified = 'Tue, 01 Jan 2023 00:00:00 GMT'; res.set('Last-Modified', lastModified); if (req.headers['if-modified-since'] === lastModified) { return res.status(304).end(); } res.send('Your resource data'); });
الأخطاء الشائعة وطرق إصلاحها
- الإعداد الخاطئ للكاش على الخادم: تحقق من إعدادات الخادم وتأكد من أنها تدعم تذاكر الكاش بشكل صحيح.
- الأخطاء في تذاكر الطلب: تأكد من أن التذاكر مثل If-Modified-Since و If-None-Match تُرسل بشكل صحيح.
- كيفية التحقق من رمز 304 وإصلاحه: استخدم أدوات تطوير المتصفح لمراقبة الطلبات واستجابات الخادم.