حالة HTTP 304 Not Modified

ما معنى HTTP 304 Not Modified، ولماذا هي من فئة 3xx لكنها ليست إعادة توجيه، وكيف يعمل ETag وLast-Modified، ولماذا قد تساعد كفاءة الزحف بصورة غير مباشرة في المواقع الكبيرة من دون التأثير في الترتيب.

نُشر أول مرة: 3 يوليو 2026 · آخر تحديث: 22 أغسطس 2026 · Advanced
اللغات
دليل واحد في هذه الصفحة

إن HTTP 304 Not Modified هي استجابة لطلب GET أو HEAD مشروط لم يتحقق شرطه، وهو طلب كان سيحصل على 200 لولا ذلك. وهي استجابة من فئة 3xx لكنها ليست إعادة توجيه؛ فلا تحمل Location ولا جسمًا إطلاقًا وفق المواصفة. وما يجعل الطلب مشروطًا هو If-None-Match (مقابل ETag) أو If-Modified-Since (مقابل Last-Modified)، لا مجرد كونها زيارة ثانية. عندما يظل validator مطابقًا، يرد الخادم بـ304 من دون جسم ويعيد العميل استخدام نسخته المخزنة مؤقتًا. لا تأثير مباشر لها في الترتيب؛ فـGoogle تملك المحتوى أصلًا، لكن Search قد تعيد حساب إشارات عنوان URL. والفائدة الحقيقية هي توفير الموارد: في المواقع الكبيرة ذات العناوين التي نادرًا ما تتغير، تتجنب الزواحف تنزيل الصفحات نفسها، فتوفّر النطاق الترددي وحسابات الخادم، وهو ما تقول Google إنه قد يحسن كفاءة الزحف بصورة غير مباشرة، لا أنه يعيد توزيع ميزانية الزحف تلقائيًا. توصي Google بـETag بوصفه validator الأساسي، وتسمح باستخدام الاثنين، وتعد التغيير مهمًا لإبطال التخزين المؤقت عندما يتغير المحتوى فعلًا، لا عند تغيير سنة حقوق النشر في التذييل. لا تخلط 304 مع 301/302/307/308 التي تنقلك إلى عنوان مختلف، ولا مع 204 No Content التي تخلو من الجسم لعدم وجود ما يُرسل فعلًا.

الخلاصة — 304 هي استجابة GET أو HEAD مشروط انتهى شرطه إلى false، وكان سيحصل على 200 لولا ذلك (RFC 9110 §15.4.5). وهي من فئة 3xx لكنها ليست إعادة توجيه: لا Location ولا عنوان جديد، وبحسب النص المعياري لا جسم («لا يمكنها أن تحتوي على محتوى أو ذيول»). يحمل الشرط If-None-Match مقابل ETag و/أو If-Modified-Since مقابل Last-Modified؛ فإذا ظل validator مطابقًا، يعيد الخادم 304 ويعيد العميل استخدام التخزين المؤقت. لا تأثير مباشر لها في الترتيب؛ فـGoogle تملك المحتوى أصلًا، مع احتمال إعادة Search حساب إشارات عنوان URL، وتوفر الموارد في المواقع الكبيرة (تقول Google إنه قد يحسن كفاءة الزحف بصورة غير مباشرة، لكنها لا تضمن إعادة توزيع ميزانية الزحف). تدعم بنية زحف Google كلا validator وتوصي بـETag بوصفه الأساسي لأنه لا يعاني من مشكلات تنسيق التاريخ. قارنها بـ301/302/307/308 التي تنقل عنوان URL، وبـ204 التي تخلو من الجسم لأن لا شيء موجودًا للإرسال.

ما معنى 304 في المواصفة؟

تعرّف RFC 9110 (دلالات HTTP) §15.4.5 الحالة بدقة: “The 304 (Not Modified) status code indicates that a conditional GET or HEAD request has been received and would have resulted in a 200 (OK) response if it were not for the fact that the condition evaluated to false.” (ترجمة) «تشير حالة 304 (غير معدّل) إلى أن طلب GET أو HEAD مشروطًا وصل، وكان سيؤدي إلى استجابة 200 (OK) لولا أن الشرط قيّم على أنه خاطئ.» هذا هو المحفز المعياري الفعلي: طلب GET أو HEAD مشروط قيّم شرطه على أنه خاطئ، وكان سيحصل بخلاف ذلك على 200. بعبارة عملية، طلب العميل الصفحة فقط إذا تغيرت، فقرر الخادم أنها لم تتغير وتجاوز إرسال الجسم. Evidence for this claim RFC 9110 defines 304 Not Modified as the response to a conditional GET or HEAD when the selected representation has not changed and says the response cannot contain content. Scope: HTTP semantics for 304 conditional responses. Confidence: high · Verified: IETF: RFC 9110 §15.4.5 — 304 Not Modified

تستخدم المواصفة نفسها كلمة “redirecting” في هذا القسم — “the server is therefore redirecting the client to make use of that stored representation as if it were the content of a 200 (OK) response” (ترجمة) «يقول الخادم إنه يعيد توجيه العميل ليستفيد من التمثيل المخزن كما لو كان محتوى استجابة 200 (OK).» لكن اقرأها بعناية: إنها تعيد العميل إلى ذاكرته المؤقتة، لا إلى عنوان URL آخر. فلا توجد ترويسة Location ولا عنوان جديد؛ ولهذا يلتبس على الناس ما إذا كانت 304 إعادة توجيه. وهي ليست كذلك بالمعنى الخاص بـHTTP.

تهم نقطتان معياريتان إضافيتان:

  • لا جسم أبدًا. تقول RFC 9110: “A 304 response is terminated by the end of the header section; it cannot contain content or trailers.” (ترجمة) «تنتهي استجابة 304 عند نهاية قسم الترويسات؛ ولا يمكنها أن تحتوي على محتوى أو ذيول.» والاستجابة 304 التي تحمل جسمًا تخالف المواصفة وقد تربك بعض العملاء؛ وهذه قاعدة حازمة لا تفضيل أسلوبي.
  • تحمل البيانات الوصفية نفسها التي كانت ستحملها 200. يجب على الخادم إنشاء حقول الترويسة التي كانت ستُرسل في استجابة 200: “MUST generate any of the following header fields that would have been sent in a 200 (OK) response to the same request: Content-Location, Date, ETag, and Vary” (ترجمة) «يجب أن ينشئ أيًا من حقول الترويسة التالية التي كانت ستُرسل في 200 للطلب نفسه: Content-Location وDate وETag وVary»، إضافة إلى Cache-Control وExpires عند الاقتضاء. وهكذا تكون 304 ترويسات 200 من دون الحمولة.
Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

كيف تعمل 304 فعلًا: الطلبات المشروطة

لا يرسل الخادم 304 من تلقاء نفسه. إنها دائمًا استجابة لـطلب مشروط؛ أي طلب يجعله العميل مشروطًا بإرفاق validator حفظه من استجابة سابقة. وهناك نوعان من validators.

ETag وIf-None-Match

إن ETag (وسم الكيان) رمز معتم يرفقه الخادم باستجابة 200؛ فكر فيه كبصمة إصدار للتمثيل الدقيق لعنوان URL. وفي الطلب التالي لذلك العنوان، يرسل العميل القيمة المحفوظة في رأس If-None-Match. يقارن الخادم: إذا ظل ETag الحالي مطابقًا، فلم يتغير شيء، فيعيد 304؛ وإذا اختلف، فيعيد 200 جديدة بالمحتوى الجديد وETag جديدًا.

Last-Modified وIf-Modified-Since

البديل القائم على التاريخ: يرسل الخادم طابع Last-Modified مع 200. وفي المرة التالية يعيده العميل في رأس If-Modified-Since، ويقارن الخادم التواريخ؛ فإذا لم يتغير المورد منذ ذلك الطابع، يعيد 304. وهذا أبسط لكنه أقل دقة (بدقة الطابع الزمني فقط) وحساس لتنسيق تاريخ HTTP الدقيق، وهو مصدر شائع للأخطاء. وعند وجود validator الاثنين، يتقدم If-None-Match (أي ETag) على If-Modified-Since.

ETags قوية وضعيفة

يمكن أن يكون ETag قويًا أو ضعيفًا، ويهم الفرق. وفق إرشادات MDN للطلبات المشروطة، «يتكون التحقق القوي من ضمان أن المورد مطابق، بايتًا ببايت، للمورد الذي يُقارن به». ويُسبق ETag الضعيف بـW/ (مثل ETag: W/"abc123") ولا يثبت إلا التكافؤ الدلالي؛ ومثال MDN أن «صفحة تختلف عن أخرى فقط بسبب تاريخ مختلف في تذييلها أو إعلان مختلف ستُعد مطابقة للأخرى عند التحقق الضعيف». وتلزم ETags القوية (من دون بادئة) لأشياء مثل طلبات النطاق التي تحتاج تطابقًا بايتيًا؛ وتفيد الضعيفة عندما لا ينبغي للاختلاف في الضغط أو المسافات البيضاء أو فروق تافهة غير جوهرية أن يفرض جلبًا كاملًا جديدًا. والفخ العملي: إذا تغير ETag كلما أعيد ضغط المحتوى بـgzip أو Brotli، أو اختلف بين خوادم موازنة الحمل، فستطلق عمليات زحف غير ضرورية؛ اختر القوي أو الضعيف عمدًا وحافظ على استقرار القيمة للمحتوى الذي لم يتغير فعلًا.

المصافحة الكاملة خطوة بخطوة

  1. الطلب الأول → يعيد الخادم 200 OK مع المحتوى، وETag و/أو Last-Modified.
  2. يخزن العميل المحتوى وvalidator تلك.
  3. الطلب التالي → يرسل العميل If-None-Match و/أو If-Modified-Since مع القيم المخزنة.
  4. يقرر الخادم: لم يتغير → 304 Not Modified بلا جسم، ويعيد العميل استخدام التخزين المؤقت؛ تغير → 200 OK بالجسم الجديد وvalidator حديث.
Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation

إذا أردت المعالجة الأعمق للتخزين المؤقت وvalidators بوصفها وسيلة لكفاءة الزحف — قصة الطلبات المشروطة كاملة وصلتها بميزانية الزحف — فهذا موضوع مرافق؛ أما هذا المقال فيركز على رمز الحالة.

304 وSEO: لا أثر في الترتيب، وأثر حقيقي في كفاءة الزحف

هذه هي قصة SEO كاملة، وهي أضيق مما توحي به كثير من العبارات الجاهزة في المدونات. لا أثر مباشر لـ304 في الترتيب، كما أن إرشادات Google حول تأثير رموز الحالة في الزحف والفهرسة تحد أثر الفهرسة أيضًا: قد يعيد Search حساب إشارات عنوان URL، لكن 304 لا تغير بخلاف ذلك طريقة فهرسة الصفحة. تملك Google المحتوى من الزحف السابق؛ وتؤكد 304 فقط أنه لم يتغير، فتواصل استخدامه. ولا توجد مكافأة ترتيب لإعادة 304.

ما تمنحك إياه 304 فعلًا هو توفير موارد قد يحسن كفاءة الزحف بصورة غير مباشرة. ففي منشور Google Search Central عن تخزين HTTP المؤقت في ديسمبر 2024، قال Gary Illyes بوضوح: «خصوصًا إذا كان لديك موقع كبير ذو محتوى نادر التغير تحت عناوين URL فردية، فقد يساعد السماح بالتخزين المؤقت محليًا على زحف موقعك بكفاءة أكبر. وتدعم بنية زحف Google التخزين المؤقت الاستدلالي في HTTP كما تحدده مواصفة التخزين المؤقت، وبخاصة عبر رأس استجابة ETag ورأس طلب If-None-Match، ورأس استجابة Last-Modified ورأس طلب If-Modified-Since».

وفي آلية 304 الدقيقة، يوضح المنشور نفسه لماذا يمثل الجسم الفارغ النقطة الأساسية: إذا كانت قيمة ETag التي يرسلها الزاحف «تطابق القيمة الحالية التي أنشأها الخادم، فعلى خادمك إعادة رمز حالة HTTP 304 (Not modified) من دون جسم HTTP»، وتهم عبارة «من دون جسم HTTP» لأن «خادمك لا يضطر إلى استهلاك موارد الحساب في إنشاء المحتوى فعلًا» ولا «إلى نقل جسم HTTP»؛ فتوفّر الحساب والنطاق الترددي على الجانبين. وصياغة Google للفائدة اللاحقة مشروطة: قد تؤدي وفورات الموارد إلى تحسين كفاءة الزحف بصورة غير مباشرة. وليست وعدًا بإعادة توزيع الجهد الموفر تلقائيًا إلى عناوينك الجديدة أو المحدثة؛ تعامل معها كآلية توفير موارد ذات فائدة محتملة لا مضمونة.

لماذا يهم ذلك أكثر في المواقع الكبيرة؟

إذا كان لديك بضع مئات من الصفحات، فهذه مسألة نظرية إلى حد كبير؛ ستزحف Google إلى موقعك كله بسهولة في جميع الأحوال. وتتوسع الفائدة مع الحجم: فالموقع الذي يملك مئات الآلاف أو ملايين عناوين URL، وكثير منها نادر التغير، يستفيد ماديًا عندما تتجنب الزواحف إعادة جلب كل النسخ التي لم تتغير. وهذا هو الجمهور الذي يستهدفه منشور Google؛ وهي الصياغة الصادقة التي ينبغي الحفاظ عليها، فلا تبالغ في بيع 304 كتكتيك للمواقع الصغيرة.

ETag أم Last-Modified، وما الذي يعد «تغيرًا»؟

توصي Google بـETag بوصفه validator الأساسي: «نوصي بشدة باستخدام ETag لأنه أقل عرضة للأخطاء والهفوات (فقيمته غير منظمة، بخلاف قيمة Last-Modified)». ولا بأس باستخدام الاثنين بل هو مشجع. وإذا استخدمت Last-Modified، «فيجب تنسيق التاريخ وفق معيار HTTP»؛ وتوصي Google بصيغة «Weekday, DD Mon YYYY HH:MM:SS Timezone»، مثل «Fri, 4 Sep 1998 19:15:56 GMT»، وإلا فقد يتم تجاهله بصمت. وتقترح Google أيضًا ضبط حقل max-age في Cache-Control لمساعدة الزواحف على تقرير وقت إعادة الزحف. وتحفظ هذه الوحدة العبارات المصدرية: “We strongly recommend using ETag because it’s less prone to errors and mistakes (the value is not structured unlike the Last-Modified value).” (ترجمة) «نوصي بشدة باستخدام ETag لأنه أقل عرضة للأخطاء والهفوات (فقيمته غير منظمة، بخلاف قيمة Last-Modified).» و*“Weekday, DD Mon YYYY HH:MM:SS Timezone,”* (ترجمة) «Weekday, DD Mon YYYY HH:MM:SS Timezone،» و*“Our recommendation is that you require a cache refresh on significant changes to your content; if you only updated the copyright date at the bottom of your page, that’s probably not significant.”* (ترجمة) «نوصي بأن تشترط تحديث التخزين المؤقت عند حدوث تغييرات مهمة في المحتوى؛ وإذا لم تكن قد حدثت إلا سنة حقوق النشر في أسفل الصفحة، فذلك على الأرجح غير مهم.» و*“If my server returns 304, Google will use stale content forever.”* (ترجمة) «إذا أعاد خادمي 304، فستستخدم Google المحتوى القديم إلى الأبد.»

Evidence for this claim Google's crawler guidance recommends ETag because its opaque value avoids date-formatting errors, while also allowing both ETag and Last-Modified; this is Google-specific operational advice, not a change to HTTP validator semantics. Scope: HTTP cache validation Confidence: high · Verified: Crawling December: HTTP caching

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

ماذا يفعل Googlebot وBingbot فعلًا؟

ليست كل طلبات الزواحف مشروطة. توضح وثائق زحف Google أن دعم التخزين المؤقت يختلف بين زواحف Google وجالباتها بحسب المنتج الذي تخدمه؛ فـGooglebot يدعم التخزين المؤقت عند إعادة الزحف إلى عناوين URL للبحث، بينما لا تدعمه بعض جالبات Google الأخرى إلا في شروط معينة. لذلك، حتى مع ضبط الرؤوس صحيحًا، لا تتوقع أن تحمل 100% من الطلبات If-None-Match أو If-Modified-Since. وبالنسبة إلى Bing، فالطلبات المشروطة ليست ميزة خاصة بـGoogle؛ إذ يدعم زاحف Bing طلب GET مشروطًا (يرسل If-Modified-Since و، عند توفره، If-None-Match ويقبل 304 عند عدم تغير المحتوى) منذ تدوينة Live Search في 2008 على الأقل، مع أن Bing لم ينشر نظيرًا حديثًا لتدوينة Google في 2024. تعامل مع الآلية كسلوك HTTP عام ينطبق على المحركين.

كيف تنفذ دعم 304؟

  1. أرسل validators مع 200. اضبط الخادم أو CDN أو التطبيق لإرفاق ETag (موصى به) و/أو رأس Last-Modified منسقًا صحيحًا باستجابات 200 العادية. تنشئ خوادم وأطر كثيرة ETags تلقائيًا للملفات الثابتة؛ أما الاستجابات الديناميكية فعادةً فتحتاج إلى تفعيل ذلك.
  2. احترم الرؤوس المشروطة عند العودة. عندما يصل طلب يحمل If-None-Match أو If-Modified-Since، قارن بالقيمة الحالية وأعد 304 (بلا جسم) إذا ظلت مطابقة، أو 200 جديدة إذا لم تعد مطابقة. وغالبًا ما تتولى خوادم الملفات الثابتة ذلك، أما مسارات التطبيق وعمّال الحافة فكثيرًا ما لا يفعلونه إلا إذا وصلتهم الأسلاك صراحةً.
  3. قرر معنى «تغير» وحافظ على ثبات ETag للمحتوى الذي لم يتغير فعلًا؛ ولا تدع إعادة الضغط أو اختلاف الخادم يقلبه بلا حاجة.
  4. راقب الإعدادات الخاطئة الكلاسيكية:
    • Always-200 — عدم إرسال validators أبدًا، فلا يصبح أي طلب مشروطًا ولا تحصل على فائدة الكفاءة.
    • ETags غير مستقرة — قيمة تتغير رغم عدم تغير المحتوى (بسبب موازنة الحمل أو إعادة الضغط)، فتفرض عمليات جلب مستمرة.
    • 304 قديمة — الأخطر: خادم يستمر في إعادة 304 (أو ETag غير متغير) بعد تغير المحتوى فعلًا، فلا تلتقط الزواحف وذاكرات التخزين التحديث. هذه مشكلة يجب التقاطها في تحليل السجلات وليست عيبًا ملازمًا لـ304.

304 مقابل رموز الحالة الأخرى

304 مقابل 301 و302 و307 و308

تلك هي إعادة التوجيه الفعلية. تحمل 301 أو 308 (دائمة) أو 302 أو 307 (مؤقتة) رأس Location وتنقل العميل إلى عنوان URL مختلف؛ كما تمرر 301 و308 إشارة canonical. لا تحمل 304 Location ولا تنقل أحدًا ولا تمرر إشارة ترتيب. إنها من عائلة 3xx نفسها بالرقم، لكن وظيفتها مختلفة تمامًا. وتوجد تفاصيل كل إعادة توجيه في مقالاتها الخاصة (راجع قطعة 301 redirect ومركز redirects الفرعي).

304 مقابل 204 No Content

كلتاهما بلا جسم، لكن لأسباب مختلفة تمامًا. إن 204 No Content نجاح من فئة 2xx بجسم فارغ عمدًا لأن الخادم لا يملك شيئًا يرسله فعلًا؛ مثل DELETE أو PUT ناجح في API أو beacon تحليلات. كما لا ترسل 304 جسمًا، لكن ليس لعدم وجود شيء يرسل؛ بل لأن «لديك النسخة بالفعل وما زالت صالحة». لا تخلط بينهما: قد تعامل 204 في عنوان URL لصفحة كـsoft 404 لعدم وجود محتوى قابل للفهرسة، بينما 304 تأكيد لصلاحية محتوى تملكه Google أصلًا. ويتناول مقال 204 No Content ذلك الرمز كاملًا.

خرافات شائعة عن 304

  1. «304 إعادة توجيه». لا رأس Location ولا انتقال لأحد. يعيد العميل استخدام نسخته المخزنة مؤقتًا. وتعني عبارة RFC 9110 «إعادة توجيه العميل للاستفادة من التمثيل المخزن» إعادته إلى الذاكرة المؤقتة، لا إلى عنوان URL آخر.
  2. «304 خطأ يجب إصلاحه». إنها النتيجة الصحيحة المقصودة لإعداد طلبات مشروطة يعمل. إن رؤية 304 في زحف أو DevTools علامة على عمل التخزين المؤقت؛ وهي أكثر المفاهيم الخاطئة شيوعًا في نتائج البحث.
  3. «304 تساعد الترتيب». لا يوجد أثر مباشر في الترتيب، كما تحد Google أثر الفهرسة أيضًا؛ فقد يعيد Search حساب إشارات عنوان URL، لكن 304 لا تغير الفهرسة بخلاف ذلك. الفائدة توفير الموارد الذي تقول Google إنه قد يحسن كفاءة الزحف بصورة غير مباشرة في المواقع الكبيرة جدًا، وليس إشارة ترتيب ولا ضمانًا لانتقال الجهد الموفر إلى عناوين أخرى.
  4. «إذا أعاد خادمي 304، فستستخدم Google المحتوى القديم إلى الأبد». “If my server returns 304, Google will use stale content forever.” (ترجمة) «إذا أعاد خادمي 304، فستستخدم Google المحتوى القديم إلى الأبد.» لا تعمل 304 إلا ما دام validator مطابقًا. وما إن يتغير المحتوى فعلًا حتى يعيد الخادم المنفذ صحيحًا 200 جديدة مع validators جديدة. أما الخطر الحقيقي فهو خادم معد بطريقة خاطئة يستمر في إعادة 304 بعد تغير المحتوى؛ وهذا خلل، لا خاصية في 304.
Evidence for this claim RFC 9111 defines validation as checking whether a stored response remains current, typically with a conditional request that can receive 304 Not Modified. Scope: HTTP cache validation; it does not create a Search ranking benefit. Confidence: high · Verified: IETF: RFC 9111 §4.3 — Validation
  1. «ETag وLast-Modified قابلان للتبادل». كلاهما validator، لكن Last-Modified حساس لتنسيق التاريخ ولا يملك إلا دقة طابعه الزمني، بينما ETag معتم ودقيق (وقد يختلف على نحو مزعج بين الخوادم أو بعد إعادة الضغط إذا نُفذ بإهمال). توصي Google بـETag أساسيًا، وباستخدام الاثنين إن أمكن.

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

هل HTTP 304 خطأ؟ لا؛ إنها إشارة نجاح تدل على عمل التخزين المؤقت. وتعني أن النسخة المخزنة لدى العميل ما زالت صالحة.

هل 304 Not Modified إعادة توجيه؟ لا. هي من فئة 3xx بحكم الترقيم، لكنها لا تحمل رأس Location ولا تنقل العميل إلى عنوان URL جديد.

هل تساعد 304 SEO أو الترتيب؟ لا أثر مباشر في الترتيب، ولا أثر في الفهرسة عدا احتمال إعادة Google حساب إشارات عنوان URL. إنها توفر النطاق الترددي والحساب عبر تمكين الزواحف من تخطي الصفحات التي لم تتغير، وهو ما تقول Google إنه قد يحسن كفاءة الزحف بصورة غير مباشرة في المواقع الكبيرة.

ما الفرق بين ETag وLast-Modified؟ ETag بصمة إصدار معتمة تُطابق عبر If-None-Match؛ وLast-Modified طابع زمني يُطابق عبر If-Modified-Since. وتوصي Google بـETag لأنه أقل عرضة للأخطاء.

ما هو ETag الضعيف مقابل القوي؟ يثبت ETag القوي تطابق المحتوى بايتًا ببايت؛ أما ETag الضعيف (ذو البادئة W/) فيثبت التكافؤ الدلالي ويتسامح مع فروق تافهة مثل الضغط أو تغير تاريخ التذييل.

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

كيف أجعل خادمي يعيد 304 بصورة صحيحة؟ أرسل ETag أو Last-Modified مع 200، ثم احترم If-None-Match أو If-Modified-Since في الطلب التالي بإعادة 304 بلا جسم عندما يظل validator مطابقًا.

ما الفرق بين 304 و204؟ كلتاهما بلا جسم؛ 204 لأن لا شيء موجودًا للإرسال، و304 لأن العميل يملك نسخة ما زالت صالحة.

هل يرسل Googlebot رؤوسًا مشروطة في كل طلب؟ لا؛ يختلف دعم التخزين المؤقت بين الزواحف، لذلك لا يكون كل طلب مشروطًا حتى مع ضبط الرؤوس.

هل يمكن أن تحمل استجابة 304 جسمًا؟ لا. وفق RFC 9110، «لا يمكنها أن تحتوي على محتوى أو ذيول». واستجابة 304 ذات جسم مخالفة للمواصفة.

Evidence for this claim A 304 response terminates after the header section and cannot contain content or trailers. Scope: conditional GET and HEAD Confidence: high · Verified: RFC 9110 §15.4.5: 304 Not Modified

Try it live

This is a real endpoint on this site — not a simulation. Hit it from the button, open it in a new tab, or curl -i it from your terminal, and the server answers with the actual status code this article is about.

Open in new tab ↗

Add an expert note

Pin an expert quote

New person? Create their unclaimed profile at /admin/experts/ → Pin a quote first.