الزحف في ديسمبر: التخزين المؤقت عبر HTTP

الاثنين 9 ديسمبر 2024

موضوعنا اليوم هو التخزين المؤقت.

توسّعت شبكة الإنترنت بمرور السنين، ما أدى إلى زيادة في عدد عمليات الزحف التي يُجريها محرّك بحث Google. مع أنّ البنية الأساسية للزحف على Google متوافقة مع آليات التخزين المؤقت الإرشادي، وقد كانت دائمًا كذلك، انخفض عدد الطلبات التي يمكن عرضها من ذاكرات التخزين المؤقت المحلية: منذ 10 سنوات، كانت ‎0.026% من إجمالي عمليات الجلب قابلة للتخزين المؤقت، وهي نسبة ليست مشجّعة، لكنّها انخفضت أكثر وأصبحت الآن ‎0.017%.

ما أهمية التخزين المؤقت؟

التخزين المؤقت هو جزء أساسي من مجموعة الأجزاء التي تشكّل شبكة الإنترنت. يتيح التخزين المؤقت تحميل الصفحات بلمح البصر عند معاودة زيارتها، ما يساهم في توفير موارد الحوسبة، وبالتالي الموارد الطبيعية، بالإضافة إلى توفير مقدار هائل من معدل نقل البيانات المُكلِف لدى كل من العملاء والخوادم.

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

ننصح بشدة باستخدام السمة ETag لأنّها أقل عرضة للأخطاء والمشاكل (فقيمتها غير منظَّمة، بعكس قيمة السمة Last-Modified). وعند الإمكان، ننصحكم بتوفير كِلتا السمتين، لأنّ ذلك قد يكون أكثر فائدة.

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

ETag وIf-None-Match

تتيح برامج الزحف من Google استخدام طلبات مشروطة تستند إلى ETag، كما هو محدّد بالضبط وفق معيار التخزين المؤقت عبر HTTP. بعبارة أخرى، لإطلاع برامج الزحف من Google على تفضيلاتكم بشأن التخزين المؤقت، يجب ضبط القيمة Etag على أي سلسلة ASCII عشوائية (يمكن أن تكون جزءًا من المحتوى أو رقم إصدار أو جزءًا من π، كما تشاؤون)، شرط أن تكون القيمة فريدة لتمثيل المحتوى المستضاف على عنوان URL الذي يتم الوصول إليه. على سبيل المثال، في حال استضافة نُسخ مختلفة من المحتوى نفسه على عنوان URL نفسه (مثلاً نسخة مخصّصة لأجهزة الكمبيوتر وأخرى مخصّصة للأجهزة الجوّالة)، يمكن استخدام قيمة ETag فريدة في كل نسخة.

إنّ برامج الزحف من Google التي تتيح التخزين المؤقت سترسل القيمة ETag التي تم عرضها نتيجة عملية زحف سابقة إلى عنوان URL في If-None-Match header. إذا كانت قيمة ETag التي أرسلها الزاحف مطابقة للقيمة الحالية التي أنشأها الخادم، من المفترض أن يعرض الخادم الرمز 304 لحالة HTTP (لم يتم التعديل) بدون نص HTTP. ومن المهم ألّا يتم عرض نص HTTP للسببين التاليين:

  • لن يحتاج الخادم إلى استهلاك موارد الحوسبة لإنشاء المحتوى الفعلي، ما يؤدي إلى أن توفّروا المال
  • لن يحتاج الخادم إلى نقل نص HTTP، ما يؤدي أيضًا إلى أن توفّروا المال

من جهة العميل، مثلاً متصفح المستخدم أو Googlebot، يتم استرداد المحتوى المدرَج على عنوان URL المطلوب من ذاكرة التخزين المؤقت الداخلية لدى العميل. وبما أنّه لن يتم نقل أي بيانات، تحدث هذه العملية بلمح البصر، ما يعزّز رضا المستخدمين وقد يساهم أيضًا في توفير بعض الموارد لديهم.

Last-Modified وIf-Modified-Since

كما هي الحال بالنسبة إلى السمة ETag، تتيح برامج الزحف من Google استخدام طلبات مشروطة تتضمّن السمة Last-Modified based أيضًا، كما هو محدّد بالضبط وفق معيار التخزين المؤقت عبر HTTP. وتعمل هذه السمة بالطريقة نفسها كالسمة ETag من منظور دلالي، أي أنّه يتم استخدام معرّف لتحديد ما إذا كان المورد قابلاً للتخزين مؤقتًا، وتوفّر المزايا نفسها كالسمة ETag من جهة العميل.

مع ذلك، إليكم بعض النصائح التي يجب الالتفات إليها عند استخدام Last-Modified كتوجيه للتخزين المؤقت:

  1. يجب أن يكون تنسيق التاريخ في العنوان الذي يتضمّن Last-Modified متوافقًا مع معيار HTTP. لتجنُّب حدوث أي مشاكل متعلّقة بالتحليل، ننصح باستخدام التنسيق التالي للتاريخ: "اليوم من الأسبوع، ‎DD Mon YYYY HH:MM:SS المنطقة الزمنية". مثلاً: "Fri, 4 Sep 1998 19:15:56 GMT".
  2. مع أنّ ضبط الحقل max-age في العنوان الذي يتضمّن Cache-Control ليس شرطًا، ننصحكم بضبطه لمساعدة برامج الزحف على معرفة الوقت المناسب لإعادة الزحف إلى عنوان URL المحدّد. اضبطوا قيمة الحقل max-age على عدد الثواني المتوقّع ألّا يتغيّر المحتوى خلالها. مثلاً: Cache-Control: max-age=94043.

أمثلة

أدرك أنّه قد يكون من الصعب فهم طريقة عمل التخزين المؤقت الإرشادي، إلّا أنّ الاطّلاع على مثال على سلاسل الطلبات والاستجابات قد يساهم في توضيح طريقة العمل. في ما يلي سلسلتان، واحدة لـ ETag/If-None-Match والأخرى لـ Last-Modified/If-Modified-Since، لتوضيح طريقة العمل المفترَضة:

ETag/If-None-Match Last-Modified/If-Modified-Since
استجابة الخادم لعملية زحف: هي الاستجابة التي تتيح للزاحف حفظ الحقلين ETag وLast-Modified اللذين يحدّدان الشروط المسبقة ضمن العنوان.
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
ETag: "34aa387-d-1568eb00"
...
HTTP/1.1 200 OK
Content-Type: text/plain
Date: Fri, 4 Sep 1998 19:15:50 GMT
Last-Modified: Fri, 4 Sep 1998 19:15:56 GMT
Cache-Control: max-age=94043
...
طلب مشروط لاحق للزاحف: يستند الطلب المشروط إلى قيم الشروط المسبقة ضمن العنوان والتي تم حفظها من طلب سابق. تتم إعادة إرسال القيم إلى الخادم لتأكيدها في عناوين الطلبات التي تتضمن If-None-Match وIf-Modified-Since.
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-None-Match: "34aa387-d-1568eb00"
...
GET /hello.world HTTP/1.1
Host: www.example.com
Accept-Language: en, hu
User-Agent: Googlebot/2.1 (+http://www.google.com/bot.html)
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...
استجابة الخادم للطلب المشروط: بما أنّه تم التأكد من جهة الخادم من صحة قيم الشروط المسبقة ضمن العنوان والتي أرسلها الزاحف، يعرض الخادم للزاحف الرمز 304 لحالة HTTP (بدون نص HTTP). يحدث ذلك لكل الطلبات اللاحقة إلى أن يتعذر التأكد من صحة الشروط المسبقة (يتغيّر تاريخ ETag أو Last-Modified من جهة الخادم).
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:52 GMT
Vary: Accept-Encoding
If-None-Match: "34aa387-d-1568eb00"
...
HTTP/1.1 304 Not Modified
Date: Fri, 4 Sep 1998 19:15:50 GMT
Expires: Fri, 4 Sep 1998 19:15:51 GMT
Vary: Accept-Encoding
If-Modified-Since: Fri, 4 Sep 1998 19:15:56 GMT
...

إذا كنتم تودّون تعزيز رضا المستخدمين وتوفير بعض المال من خلال خفض تكلفة الاستضافة، ننصحكم باستشارة المستضيف أو مزوّد نظام إدارة المحتوى (CMS) أو المطوّرين بشأن كيفية تفعيل التخزين المؤقت عبر HTTP لمواقعكم، لأنّ ذلك سيعود بالفائدة على المستخدمين.

إذا أردتم الدردشة بشأن التخزين المؤقت، ما عليكم سوى الانتقال إلى منتدى المساعدة الخاص بـ "مجموعة خدمات بحث Google"، وإذا كانت لديكم ملاحظات بشأن طريقة التخزين المؤقت لدينا، يمكنكم إرسالها من خلال مستنداتنا المتعلّقة بالتخزين المؤقت والتي نشرناها في الوقت نفسه مع منشور المدوّنة هذا.


هل يهمّك معرفة المزيد عن الزحف؟ ننصحك بالاطّلاع على سلسلة "الزحف في ديسمبر" بأكملها: