أنت تتصفح موقعك الإخباري المفضل للمرة الثالثة اليوم. تنقر على زر التحديث، ويتم تحميل الصفحة على الفور تقريبًا. خلف الكواليس، لم يقم متصفحك فعليًا بتنزيل شعار الموقع، أو ورقة الأنماط CSS، أو ملفات JavaScript مرة أخرى. لقد كانت لديه بالفعل. لقد قام فقط بالتحقق مع الخادم لمعرفة ما إذا كانت قد تغيرت، وأعطى الخادم استجابة بسيطة من سطر واحد: 304 Not Modified.
رمز الحالة الصغير والفعال هذا هو أحد الأبطال المجهولين لأداء الويب. إنه السبب في أن الويب الحديث يبدو سريعًا ومتجاوبًا. إنه أساس التخزين المؤقت، ويوفر مليارات الجيجابايت من النطاق الترددي كل يوم. للوهلة الأولى، قد لا يبدو مثيرًا مثل إعادة التوجيه أو رمز الخطأ، ولكن ثق بي، إنه أحد أقوى الأدوات لجعل مواقع الويب وواجهات برمجة التطبيقات أسرع وأكثر كفاءة.
الرمز 304 ليس خطأ؛ إنه تأكيد ناجح وفعال. إنها طريقة الخادم للقول: "لديك بالفعل أحدث إصدار من هذا الملف محفوظًا محليًا. لا داعي لأن أرسله مرة أخرى. فقط استخدم ما لديك."
في هذه المدونة، سنتعمق في معنى 304 Not Modified، وكيف يعمل، ولماذا هو مهم، وكيف يمكن للمطورين استخدامه لبناء مواقع ويب وواجهات برمجة تطبيقات أسرع وأكثر استجابة. إذا كنت مطورًا، فإن فهم كيفية عمل 304 أمر بالغ الأهمية لبناء تطبيقات سريعة وفعالة وقابلة للتوسع.
قبل أن نبدأ، إذا كنت ترغب في اختبار واستكشاف كيفية تعامل خوادم الويب أو واجهات برمجة التطبيقات الخاصة بك مع استجابات مثل 304 Not Modified، فتأكد من تنزيل Apidog مجانًا. Apidog هي أداة قوية لاختبار وتوثيق واجهات برمجة التطبيقات تساعدك على استكشاف استجابات HTTP، والتحقق من صحة الاستجابات، وتحسين الواجهة الخلفية الخاصة بك كالمحترفين. والأفضل من ذلك كله، أنها مجانية للتنزيل. ابدأ في تحسين واجهات برمجة التطبيقات الخاصة بك اليوم.
الآن، دعنا نتعمق في رمز حالة HTTP 304 Not Modified ونرى لماذا هو بهذه الأهمية.
المشكلة: نقل البيانات المهدر
في الأيام الأولى للويب، كانت كل طلبية تعمل بنفس الطريقة:
- المتصفح: "أعطني
/logo.png." - الخادم: "تفضل!" (
200 OK+ بيانات الصورة الكاملة) - المتصفح (بعد ثانيتين): "أعطني
/logo.pngمرة أخرى." - الخادم: "تفضل مرة أخرى!" (
200 OK+ نفس بيانات الصورة بالضبط)
كان هذا إهدارًا كبيرًا. كان يتم نقل نفس الشعار، وورقة الأنماط، والبرامج النصية عبر الشبكة عشرات المرات يوميًا لمستخدم واحد، مما يستهلك النطاق الترددي ويبطئ تحميل الصفحات.
الحل لهذه الكفاءة المنخفضة هو عملية من جزأين: التخزين المؤقت والطلبات الشرطية، مع رمز الحالة 304 كنجم العرض.
ماذا يعني رمز HTTP 304 Not Modified في الواقع؟
رمز الحالة 304 Not Modified هو استجابة تشبه إعادة التوجيه تشير إلى عدم وجود حاجة للخادم لنقل المورد المطلوب لأن العميل لديه بالفعل نسخة محدثة في ذاكرته المؤقتة المحلية.
إنها رسالة نجاح ذات جسم فارغ. يقول الخادم بشكل أساسي: "لقد كان طلبك ناجحًا. المورد الذي طلبته لم يتغير. ليس لدي أي شيء جديد لأرسله إليك."
بمعنى آخر، بدلاً من إهدار النطاق الترددي عن طريق إرسال نفس البيانات مرارًا وتكرارًا، يستجيب الخادم ببساطة بـ تأكيد خفيف الوزن.
استجابة 304 النموذجية بسيطة وجميلة:
HTTP/1.1 304 Not ModifiedCache-Control: public, max-age=300ETag: "a3c8d7e1f5g2"Date: Sat, 28 Oct 2023 10:00:00 GMT
هل لاحظت ما هو مفقود؟ جسم الاستجابة. لا توجد بيانات صور، ولا CSS، ولا JSON. هذا هو ما يجعل الرمز 304 فعالًا للغاية. الاستجابة بأكملها هي بضع مئات من البايتات من الرؤوس فقط، مما يوفر الميجابايت من البيانات التي كانت ستكون في الجسم.
لماذا يوجد الرمز 304؟ (تاريخ موجز)
في الأيام الأولى للويب، في كل مرة تقوم فيها بتحميل صفحة ويب، كان المتصفح يجلب كل شيء - HTML، CSS، الصور، البرامج النصية - من الصفر. كان هذا بطيئًا ومهدرًا.
لحل هذه المشكلة، قدم HTTP آليات التخزين المؤقت مثل Last-Modified وETag. تم تصميم رمز الحالة 304 لـ:
- توفير النطاق الترددي.
- تقليل حمل الخادم.
- تسريع أوقات الاستجابة.
لقد أصبح معيارًا في HTTP/1.1 ولا يزال حجر الزاوية في أداء الويب اليوم.
لماذا رمز 304 Not Modified مهم
فكر في الأمر بهذه الطريقة: في كل مرة يزور فيها المستخدم موقع ويب أو يطلب مورد واجهة برمجة تطبيقات، يمكن أن يكون تنزيل المحتوى بالكامل في كل مرة بطيئًا ومهدرًا، خاصة لمستخدمي الأجهزة المحمولة أو على الاتصالات البطيئة. من خلال الاستفادة من 304 Not Modified:
- يقلل من نقل البيانات غير الضروري، وبالتالي يقوم المستخدمون بتحميل الصفحات بشكل أسرع ويوفر المزودون النطاق الترددي.
- يقلل من حمل الخادم لأن الخادم لا يضطر إلى إرسال استجابات كاملة بشكل متكرر.
- يحسن تجربة المستخدم بأوقات تحميل أسرع وتصفح أكثر سلاسة.
- يدعم قابلية التوسع من خلال التعامل بكفاءة مع الطلبات المتكررة.
بدون 304، سيكون التخزين المؤقت غير فعال ومواقع الويب أبطأ.
الرقصة ذات الخطوتين: كيف يعمل التخزين المؤقت و 304 معًا
الرمز 304 لا يعمل بمفرده. إنه جزء من رقصة أنيقة بين العميل والخادم.
الخطوة 1: الطلب الأول (الطلب "البذرة")
في المرة الأولى التي يطلب فيها المتصفح موردًا، يستجيب الخادم بقطعتين حاسمتين من المعلومات جنبًا إلى جنب مع البيانات (200 OK):
ETag (علامة الكيان): معرف فريد، مثل بصمة الإصبع، للإصدار الحالي من المورد. غالبًا ما يكون هذا تجزئة لمحتويات الملف. إذا تغير الملف، تتغير علامة ETag.
ETag: "a3c8d7e1f5g2"
Last-Modified: تاريخ ووقت آخر تعديل للمورد.
Last-Modified: Sat, 28 Oct 2023 09:00:00 GMT
يقوم المتصفح بتخزين المورد وهذين المدققين في ذاكرته المؤقتة.
الخطوة 2: الطلب اللاحق (الطلب "الشرطي")
عندما يحتاج المتصفح إلى نفس المورد مرة أخرى (على سبيل المثال، يزور المستخدم صفحة أخرى على نفس الموقع)، فإنه لا يطلبه بشكل أعمى. بل يقوم بإجراء طلب شرطي عن طريق تضمين المدققين التي حفظها.
يمكنه القيام بذلك بطريقتين:
استخدام رأس If-None-Match (مع ETag):
GET /logo.png HTTP/1.1Host: www.example.comIf-None-Match: "a3c8d7e1f5g2"
يقول هذا الطلب: "الرجاء إرسال /logo.png إليّ فقط إذا كانت علامة ETag الحالية مختلفة عن تلك التي لدي بالفعل (a3c8d7e1f5g2)."
استخدام رأس If-Modified-Since (مع التاريخ):
GET /logo.png HTTP/1.1Host: www.example.comIf-Modified-Since: Sat, 28 Oct 2023 09:00:00 GMT
يقول هذا الطلب: "الرجاء إرسال /logo.png إليّ فقط إذا تم تعديله منذ 28 أكتوبر."
الخطوة 3: قرار الخادم
يتلقى الخادم هذا الطلب الشرطي ويتحقق من المورد.
- الحالة أ: المورد لم يتغير. يرى الخادم أن علامة ETag الحالية لا تزال تتطابق مع
"a3c8d7e1f5g2". يستجيب بـ304 Not Modifiedولا يرسل بيانات المورد. - الحالة ب: المورد تغير. يرى الخادم أن علامة ETag لم تعد تتطابق. يستجيب بـ
200 OK، وبيانات المورد الكاملة، ورؤوسETagوLast-Modifiedجديدة ليقوم المتصفح بتخزينها مؤقتًا.
تضمن هذه المصافحة الأنيقة أن يتم نقل البيانات فقط عند الضرورة القصوى.
دور رؤوس HTTP في استجابات 304
يكمن سحر 304 في الرؤوس. اللاعبان الرئيسيان هما:
- Last-Modified ← يخبر العملاء متى تم تحديث المورد آخر مرة.
- ETag (علامة الكيان) ← معرف فريد لإصدار المورد.
عندما يرسل العميل If-Modified-Since أو If-None-Match، يتحقق الخادم:
- إذا لم يتغير ← يعيد 304.
- إذا تغير ← يعيد 200 OK مع المورد الجديد.
ما هما ETag و Last-Modified؟
- ETag (علامة الكيان): معرف فريد (غالبًا ما يكون تجزئة) يمثل إصدار المورد.
- Last-Modified: الطابع الزمني الذي يشير إلى آخر مرة تم فيها تغيير المورد.
يرسل العملاء هذه القيم كرؤوس شرطية أثناء الطلبات المتكررة للتحقق مما إذا كان المحتوى قد تغير.
حالات الاستخدام الشائعة لاستجابات 304
- مواقع الويب ذات الأصول الثابتة (CSS، JS، الصور).
- واجهات برمجة تطبيقات REST التي تعيد نتائج JSON كبيرة.
- تطبيقات الهاتف المحمول التي تعتمد على مزامنة الخادم.
- شبكات CDN التي تحسن تسليم المحتوى.
- تحسين زحف محركات البحث.
مثال على سير عمل 304
إليك مثال مبسط بين المتصفح والخادم:
الطلب الأولي
textGET /styles.css HTTP/1.1 Host: example.com
الاستجابة الأولية
`textHTTP/1.1 200 OK ETag: "abc123" Last-Modified: Tue, 15 Sep 2025 11:00:00 GMT Content-Type: text/css
/* CSS styles here */`الطلب اللاحق
textGET /styles.css HTTP/1.1 Host: example.com If-None-Match: "abc123" If-Modified-Since: Tue, 15 Sep 2025 11:00:00 GMT
استجابة الخادم (لم يتغير)
textHTTP/1.1 304 Not Modified
نظرًا لأن الخادم يقول إن المحتوى لم يتغير، يستخدم المتصفح نسخته المخزنة مؤقتًا.
لماذا لا يتم دائمًا تقديم المحتوى المخزن مؤقتًا فقط؟
سؤال جيد!
إذا استخدم العملاء دائمًا المحتوى المخزن مؤقتًا دون التحقق من صحته، فقد يفوتهم التحديثات أو التغييرات الأساسية للصحة. تضمن آلية 304 حصول العملاء على الموارد المحدثة إذا لزم الأمر، مع تجنب عمليات النقل المهدرة إذا لم يتغير شيء.
تحسين محركات البحث (SEO) و 304 Not Modified
من منظور تحسين محركات البحث (SEO)، تساعد استجابات 304 محركات البحث على الزحف إلى موقعك بشكل أكثر كفاءة. فهي تقلل من استخدام النطاق الترددي وتحسن ميزانيات الزحف عن طريق تقديم استجابات "بلا محتوى" للصفحات التي لم تتغير، مما يسمح لمحركات البحث بالتركيز على المحتوى الجديد.
لماذا 304 مهم جدًا؟ الفوائد
- أوقات تحميل سريعة للغاية: يمكن للمتصفح عرض صفحة دون انتظار تنزيل كل أصل مرة أخرى. يمكنه استخدام إصداراته المخزنة مؤقتًا فورًا بعد فحص
304سريع. - توفير هائل في النطاق الترددي: هذه هي الفائدة الأكبر. إن تقديم استجابة
304بدلاً من200مع جسم كبير يوفر كمية هائلة من حركة مرور الشبكة لكل من المستخدم والخادم. - تقليل حمل الخادم: توفر الخوادم دورات وحدة المعالجة المركزية وعمليات الإدخال/الإخراج عن طريق عدم الاضطرار إلى قراءة وإرسال نفس الملف من القرص آلاف المرات في الثانية.
- تجربة مستخدم أفضل: المواقع الأسرع تجعل المستخدمين أكثر سعادة.
- تقليل التكلفة: بالنسبة للشركات التي تدفع مقابل النطاق الترددي (مثل فواتير استضافة السحابة)، فإن تقليل نقل البيانات يوفر المال مباشرة.
المشكلات الشائعة المتعلقة بـ 304 Not Modified
- ETag/Last-Modified غير صحيح أو مفقود: يؤدي إلى عدم حصول العملاء على التحديثات أو إعادة التنزيل دون داعٍ.
- الملفات الثابتة غير المنسقة بشكل صحيح: يمنع التحقق من صحة التخزين المؤقت.
- الوكلاء أو شبكات CDN التي تتعامل مع الرؤوس الشرطية بشكل خاطئ: يمكن أن تسبب عدم اتساق في التخزين المؤقت.
- سوء تكوين الخادم: إرجاع 200 OK عندما يكون 304 مناسبًا أو العكس.
اختبار الطلبات الشرطية باستخدام Apidog

يمكن أن يكون اختبار سلوك التخزين المؤقت أمرًا صعبًا. تحتاج إلى إرسال طلبات برؤوس محددة وتفسير استجابة الخادم. Apidog هي الأداة المثالية لذلك.
باستخدام Apidog، يمكنك:
- التقاط المدققين: أرسل طلبًا أوليًا إلى مورد واستخدم واجهة Apidog لعرض ونسخ رؤوس
ETagوLast-Modifiedبسهولة من استجابة200. - صياغة الطلبات الشرطية: أنشئ طلبًا جديدًا لنفس عنوان URL وأضف بسهولة رؤوس
If-None-MatchأوIf-Modified-Sinceبالقيم التي التقطتها. - التحقق من استجابة 304: أرسل الطلب الشرطي وتأكد من أن الخادم يعيد حالة
304 Not Modifiedبدون جسم. - اختبار إلغاء صلاحية التخزين المؤقت: قم بتعديل المورد على الخادم (إذا كان لديك وصول) وكرر الطلب الشرطي. يجب أن ترى الآن
200 OKمع البيانات الجديدة، مما يثبت أن منطق التخزين المؤقت لديك يعمل. - أتمتة الاختبار: أنشئ مجموعات اختبار في Apidog تعمل على أتمتة هذه العملية، مما يضمن تكوين رؤوس التخزين المؤقت لواجهة برمجة التطبيقات الخاصة بك بشكل صحيح دائمًا.
باستخدام Apidog، يمكنك ضبط التخزين المؤقت بدقة دون انتظار حالات الحافة في العالم الحقيقي. قم بتنزيل Apidog مجانًا لتسخير هذه الإمكانيات.
أفضل الممارسات للمطورين
إذا كنت تقوم بإنشاء تطبيق من جانب الخادم، يمكنك الاستفادة من 304:
- إرسال المدققين دائمًا: للموارد القابلة للتخزين المؤقت (الصور، CSS، JS، بيانات API الثابتة)، قم دائمًا بتضمين رأس
ETagأوLast-Modifiedفي استجابات200الخاصة بك. - تطبيق المنطق الشرطي: في كود الخادم الخاص بك، تحقق من رؤوس
If-None-MatchوIf-Modified-Since. إذا تطابقت مع المورد الحالي، استجب بـ304. وإذا لم تتطابق، استجب بـ200والبيانات الجديدة. - استخدام
Cache-Control: يخبر رأسCache-Control(على سبيل المثال،max-age=3600) المتصفح بالمدة التي يمكنه خلالها اعتبار المورد حديثًا دون الحاجة إلى تقديم طلب شرطي. هذا أكثر كفاءة من304.
304 Not Modified وواجهات برمجة تطبيقات RESTful
في واجهات برمجة تطبيقات REST، يعزز 304 الكفاءة بشكل كبير من خلال السماح للعملاء بتخزين تمثيلات الموارد مؤقتًا. يقلل التعامل الصحيح مع التخزين المؤقت من حمل الخادم ويسرع مزامنة العميل.
في واجهات برمجة التطبيقات التي تقدم موارد يتم تحديثها بشكل متكرر، تعد الطلبات الشرطية مع استجابات 304 ضرورية للأداء القابل للتوسع.
304 Not Modified في متصفحات الويب
- تطبق Chrome و Firefox و Safari جميعها التخزين المؤقت بناءً على
ETagوLast-Modified. - قد يؤدي التحديث (F5) إلى تشغيل فحوصات 304.
- يتجاوز التحديث القوي (Ctrl + Shift + R) التخزين المؤقت، مما يجبر على استجابة 200.
304 مقابل 200: ما الفرق؟
كلا الرمزين يعنيان "نجاح"، لكن الفرق يكمن في الحمولة:
- 200 OK ← يتم إرجاع المورد بالكامل.
- 304 Not Modified ← لا يتم إرجاع أي مورد - استخدم التخزين المؤقت.
فكر في 304 على أنه يقول:
"لا تقلق، لا يوجد شيء جديد. استمر في استخدام ما لديك بالفعل."
304 مقابل 200 OK: متى تختار ماذا
- قدم دائمًا 200 OK مع المحتوى الكامل في الطلبات الأولى أو عندما يتغير المحتوى.
- قدم 304 Not Modified فقط عندما لا يتغير المحتوى.
يضمن التحكم الصحيح في التخزين المؤقت أن يعرف العملاء متى يطلبون التحديثات ومتى يستخدمون البيانات المخزنة مؤقتًا.
الخلاصة: العامل الصامت في الويب
رمز حالة HTTP 304 Not Modified هو تحفة فنية في التصميم الفعال. إنه عامل صامت، يعمل خلف الكواليس، ويجعل الويب الحديث قابلاً للتوسع وسريعًا. إنه يوضح قوة بروتوكول تعاوني حيث يعمل العملاء والخوادم معًا لتجنب العمل غير الضروري.
قد لا يحظى رمز الحالة 304 Not Modified بالعناوين الرئيسية مثل 404 أو 500، ولكنه ضروري للأداء والتخزين المؤقت والكفاءة. إنه يقلل من استخدام النطاق الترددي، ويسرع تحميل الصفحات، ويحافظ على عمل واجهات برمجة التطبيقات بسلاسة.
بينما لن يراه المستخدمون أبدًا، فإنهم يختبرون فوائده كل يوم من خلال صفحات التحميل الأسرع والتصفح الأكثر سلاسة. بالنسبة للمطورين، فإن فهم ودعم تنفيذ استجابات 304 بشكل صحيح هو مهارة أساسية في تحسين أي خاصية ويب.
لذا في المرة القادمة التي يتم فيها تحميل صفحة في لمح البصر، تذكر استجابة 304 الصغيرة التي جعلت ذلك ممكنًا. إذا كنت مطورًا، فإن إتقان 304 يعني بناء تطبيقات أسرع وأكثر ذكاءً. إن فهم كيفية تنفيذ واختبار استجابات 304 يعزز قدرتك على بناء تطبيقات ويب وواجهات برمجة تطبيقات فعالة وعالية الأداء.
وتذكر، أصبح اختبار سلوك التخزين المؤقت وإعادة التوجيه أسهل من أي وقت مضى باستخدام Apidog، وهي أداة مجانية وقوية مصممة لمساعدتك على إتقان رموز حالة HTTP مثل 304 Not Modified، لا تثق فقط في افتراضاتك، قم بمحاكاة والتحقق من صحة التخزين المؤقت باستخدام Apidog.
