ما هو كود الحالة 304 غير معدل: بطل توفير عرض النطاق الترددي

INEZA Felin-Michel

INEZA Felin-Michel

23 سبتمبر 2025

ما هو كود الحالة 304 غير معدل: بطل توفير عرض النطاق الترددي

Apidog للمؤسسات

النشر على الخوادم المحلية

SSO و RBAC

متوافق مع SOC 2

استكشف Apidog للمؤسسات

أنت تتصفح موقعك الإخباري المفضل للمرة الثالثة اليوم. تنقر على زر التحديث، ويتم تحميل الصفحة على الفور تقريبًا. خلف الكواليس، لم يقم متصفحك فعليًا بتنزيل شعار الموقع، أو ورقة الأنماط CSS، أو ملفات JavaScript مرة أخرى. لقد كانت لديه بالفعل. لقد قام فقط بالتحقق مع الخادم لمعرفة ما إذا كانت قد تغيرت، وأعطى الخادم استجابة بسيطة من سطر واحد: 304 Not Modified.

رمز الحالة الصغير والفعال هذا هو أحد الأبطال المجهولين لأداء الويب. إنه السبب في أن الويب الحديث يبدو سريعًا ومتجاوبًا. إنه أساس التخزين المؤقت، ويوفر مليارات الجيجابايت من النطاق الترددي كل يوم. للوهلة الأولى، قد لا يبدو مثيرًا مثل إعادة التوجيه أو رمز الخطأ، ولكن ثق بي، إنه أحد أقوى الأدوات لجعل مواقع الويب وواجهات برمجة التطبيقات أسرع وأكثر كفاءة.

الرمز 304 ليس خطأ؛ إنه تأكيد ناجح وفعال. إنها طريقة الخادم للقول: "لديك بالفعل أحدث إصدار من هذا الملف محفوظًا محليًا. لا داعي لأن أرسله مرة أخرى. فقط استخدم ما لديك."

في هذه المدونة، سنتعمق في معنى 304 Not Modified، وكيف يعمل، ولماذا هو مهم، وكيف يمكن للمطورين استخدامه لبناء مواقع ويب وواجهات برمجة تطبيقات أسرع وأكثر استجابة. إذا كنت مطورًا، فإن فهم كيفية عمل 304 أمر بالغ الأهمية لبناء تطبيقات سريعة وفعالة وقابلة للتوسع.

قبل أن نبدأ، إذا كنت ترغب في اختبار واستكشاف كيفية تعامل خوادم الويب أو واجهات برمجة التطبيقات الخاصة بك مع استجابات مثل 304 Not Modified، فتأكد من تنزيل Apidog مجانًا. Apidog هي أداة قوية لاختبار وتوثيق واجهات برمجة التطبيقات تساعدك على استكشاف استجابات HTTP، والتحقق من صحة الاستجابات، وتحسين الواجهة الخلفية الخاصة بك كالمحترفين. والأفضل من ذلك كله، أنها مجانية للتنزيل. ابدأ في تحسين واجهات برمجة التطبيقات الخاصة بك اليوم.

button

الآن، دعنا نتعمق في رمز حالة HTTP 304 Not Modified ونرى لماذا هو بهذه الأهمية.

المشكلة: نقل البيانات المهدر

في الأيام الأولى للويب، كانت كل طلبية تعمل بنفس الطريقة:

  1. المتصفح: "أعطني /logo.png."
  2. الخادم: "تفضل!" (200 OK + بيانات الصورة الكاملة)
  3. المتصفح (بعد ثانيتين): "أعطني /logo.png مرة أخرى."
  4. الخادم: "تفضل مرة أخرى!" (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: قرار الخادم

يتلقى الخادم هذا الطلب الشرطي ويتحقق من المورد.

تضمن هذه المصافحة الأنيقة أن يتم نقل البيانات فقط عند الضرورة القصوى.

دور رؤوس HTTP في استجابات 304

يكمن سحر 304 في الرؤوس. اللاعبان الرئيسيان هما:

عندما يرسل العميل If-Modified-Since أو If-None-Match، يتحقق الخادم:

ما هما ETag و Last-Modified؟

يرسل العملاء هذه القيم كرؤوس شرطية أثناء الطلبات المتكررة للتحقق مما إذا كان المحتوى قد تغير.

حالات الاستخدام الشائعة لاستجابات 304

مثال على سير عمل 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 مهم جدًا؟ الفوائد

  1. أوقات تحميل سريعة للغاية: يمكن للمتصفح عرض صفحة دون انتظار تنزيل كل أصل مرة أخرى. يمكنه استخدام إصداراته المخزنة مؤقتًا فورًا بعد فحص 304 سريع.
  2. توفير هائل في النطاق الترددي: هذه هي الفائدة الأكبر. إن تقديم استجابة 304 بدلاً من 200 مع جسم كبير يوفر كمية هائلة من حركة مرور الشبكة لكل من المستخدم والخادم.
  3. تقليل حمل الخادم: توفر الخوادم دورات وحدة المعالجة المركزية وعمليات الإدخال/الإخراج عن طريق عدم الاضطرار إلى قراءة وإرسال نفس الملف من القرص آلاف المرات في الثانية.
  4. تجربة مستخدم أفضل: المواقع الأسرع تجعل المستخدمين أكثر سعادة.
  5. تقليل التكلفة: بالنسبة للشركات التي تدفع مقابل النطاق الترددي (مثل فواتير استضافة السحابة)، فإن تقليل نقل البيانات يوفر المال مباشرة.

المشكلات الشائعة المتعلقة بـ 304 Not Modified

اختبار الطلبات الشرطية باستخدام Apidog

مادة ترويجية لـ Apidog

يمكن أن يكون اختبار سلوك التخزين المؤقت أمرًا صعبًا. تحتاج إلى إرسال طلبات برؤوس محددة وتفسير استجابة الخادم. Apidog هي الأداة المثالية لذلك.

باستخدام Apidog، يمكنك:

  1. التقاط المدققين: أرسل طلبًا أوليًا إلى مورد واستخدم واجهة Apidog لعرض ونسخ رؤوس ETag وLast-Modified بسهولة من استجابة 200.
  2. صياغة الطلبات الشرطية: أنشئ طلبًا جديدًا لنفس عنوان URL وأضف بسهولة رؤوس If-None-Match أو If-Modified-Since بالقيم التي التقطتها.
  3. التحقق من استجابة 304: أرسل الطلب الشرطي وتأكد من أن الخادم يعيد حالة 304 Not Modified بدون جسم.
  4. اختبار إلغاء صلاحية التخزين المؤقت: قم بتعديل المورد على الخادم (إذا كان لديك وصول) وكرر الطلب الشرطي. يجب أن ترى الآن 200 OK مع البيانات الجديدة، مما يثبت أن منطق التخزين المؤقت لديك يعمل.
  5. أتمتة الاختبار: أنشئ مجموعات اختبار في Apidog تعمل على أتمتة هذه العملية، مما يضمن تكوين رؤوس التخزين المؤقت لواجهة برمجة التطبيقات الخاصة بك بشكل صحيح دائمًا.
button

باستخدام Apidog، يمكنك ضبط التخزين المؤقت بدقة دون انتظار حالات الحافة في العالم الحقيقي. قم بتنزيل Apidog مجانًا لتسخير هذه الإمكانيات.

أفضل الممارسات للمطورين

إذا كنت تقوم بإنشاء تطبيق من جانب الخادم، يمكنك الاستفادة من 304:

  1. إرسال المدققين دائمًا: للموارد القابلة للتخزين المؤقت (الصور، CSS، JS، بيانات API الثابتة)، قم دائمًا بتضمين رأس ETag أو Last-Modified في استجابات 200 الخاصة بك.
  2. تطبيق المنطق الشرطي: في كود الخادم الخاص بك، تحقق من رؤوس If-None-Match وIf-Modified-Since. إذا تطابقت مع المورد الحالي، استجب بـ 304. وإذا لم تتطابق، استجب بـ 200 والبيانات الجديدة.
  3. استخدام Cache-Control: يخبر رأس Cache-Control (على سبيل المثال، max-age=3600) المتصفح بالمدة التي يمكنه خلالها اعتبار المورد حديثًا دون الحاجة إلى تقديم طلب شرطي. هذا أكثر كفاءة من 304.

304 Not Modified وواجهات برمجة تطبيقات RESTful

في واجهات برمجة تطبيقات REST، يعزز 304 الكفاءة بشكل كبير من خلال السماح للعملاء بتخزين تمثيلات الموارد مؤقتًا. يقلل التعامل الصحيح مع التخزين المؤقت من حمل الخادم ويسرع مزامنة العميل.

في واجهات برمجة التطبيقات التي تقدم موارد يتم تحديثها بشكل متكرر، تعد الطلبات الشرطية مع استجابات 304 ضرورية للأداء القابل للتوسع.

304 Not Modified في متصفحات الويب

304 مقابل 200: ما الفرق؟

كلا الرمزين يعنيان "نجاح"، لكن الفرق يكمن في الحمولة:

فكر في 304 على أنه يقول:

"لا تقلق، لا يوجد شيء جديد. استمر في استخدام ما لديك بالفعل."

304 مقابل 200 OK: متى تختار ماذا

يضمن التحكم الصحيح في التخزين المؤقت أن يعرف العملاء متى يطلبون التحديثات ومتى يستخدمون البيانات المخزنة مؤقتًا.

الخلاصة: العامل الصامت في الويب

رمز حالة HTTP 304 Not Modified هو تحفة فنية في التصميم الفعال. إنه عامل صامت، يعمل خلف الكواليس، ويجعل الويب الحديث قابلاً للتوسع وسريعًا. إنه يوضح قوة بروتوكول تعاوني حيث يعمل العملاء والخوادم معًا لتجنب العمل غير الضروري.

قد لا يحظى رمز الحالة 304 Not Modified بالعناوين الرئيسية مثل 404 أو 500، ولكنه ضروري للأداء والتخزين المؤقت والكفاءة. إنه يقلل من استخدام النطاق الترددي، ويسرع تحميل الصفحات، ويحافظ على عمل واجهات برمجة التطبيقات بسلاسة.

بينما لن يراه المستخدمون أبدًا، فإنهم يختبرون فوائده كل يوم من خلال صفحات التحميل الأسرع والتصفح الأكثر سلاسة. بالنسبة للمطورين، فإن فهم ودعم تنفيذ استجابات 304 بشكل صحيح هو مهارة أساسية في تحسين أي خاصية ويب.

لذا في المرة القادمة التي يتم فيها تحميل صفحة في لمح البصر، تذكر استجابة 304 الصغيرة التي جعلت ذلك ممكنًا. إذا كنت مطورًا، فإن إتقان 304 يعني بناء تطبيقات أسرع وأكثر ذكاءً. إن فهم كيفية تنفيذ واختبار استجابات 304 يعزز قدرتك على بناء تطبيقات ويب وواجهات برمجة تطبيقات فعالة وعالية الأداء.

وتذكر، أصبح اختبار سلوك التخزين المؤقت وإعادة التوجيه أسهل من أي وقت مضى باستخدام Apidog، وهي أداة مجانية وقوية مصممة لمساعدتك على إتقان رموز حالة HTTP مثل 304 Not Modified، لا تثق فقط في افتراضاتك، قم بمحاكاة والتحقق من صحة التخزين المؤقت باستخدام Apidog.

button

ممارسة تصميم API في Apidog

اكتشف طريقة أسهل لبناء واستخدام واجهات برمجة التطبيقات