it-swarm.asia

ما الذي يجب تعيين حقول رأس طلب HTTP الخاص به منتهية الصلاحية والتحكم في ذاكرة التخزين المؤقت و pragma؟

لدي موقع ويب أقوم بتحديث المحتوى مرة واحدة شهريًا تقريبًا. عندما أتحقق من حقول رأس طلب HTTP ، أحصل على الإخراج التالي:

Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache

سؤالي هو ، بالنظر إلى عدد مرات تحديث المحتوى ، أفكر في إعداد هذه الحقول يدويًا للسماح بالتخزين المؤقت للموقع. أنا أستخدم php header ()؛ قيادة للقيام بذلك.

لذلك ، سؤالي هو: ما الذي يجب تعيين حقول رأس طلب HTTP الخاص به منتهية الصلاحية والتحكم في ذاكرة التخزين المؤقت و pragma؟ أيضا ، هل يجب أن أقوم بتعيين أي حقول أخرى بالإضافة إلى تلك الحقول؟

3
Wislow

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

ما قمت بتعيينه أعلاه يعتمد على تسامحك مع المحتوى الذي لا معنى له. أوصي بعدم ضبط Cache-Control أو Pragma على الإطلاق ، وتعيين انتهاء الصلاحية على بعض القيمة التي تشعر بالراحة عند إزاحتها (8 ساعات؟ يوم واحد؟) من زيارة المستخدم. هذا هو حقا ذاتية رغم ويعتمد على المحتوى الخاص بك.

بالإضافة إلى تعيين ما ورد أعلاه إلى بعض القيم المعقولة ، يجب عليك أيضًا تعيين رأس مثل Last-Modified أو ETag الذي يسمح بالطلبات الشرطيةHEAD والتأكد من الرد باستخدام 304 وليس المحتوى إذا كانت الصفحة غير موجودة تم تعديله. يمكن أن يستند هذا إلى حقل تاريخ_حرير قاعدة البيانات (في حالة وجوده) أو بالنسبة لـ ETag ، يمكنك بناء قاعدة بيانات على محتويات الصفحة.

أنا شخصيا اتخاذ نهج زوجين. في الصفحات الثابتة ، أجعل PHP برنامج نصي للإخراج يكتب المخزن المؤقت للإخراج في دليل ذاكرة التخزين المؤقت ، ولدي قاعدة إعادة كتابة Apache تعمل من الموقع الثابت إذا كان الملف موجودًا بالفعل. ثم في دليل ذاكرة التخزين المؤقت ، أقوم بتمكين التخزين المؤقت والتعامل مع صفحات HTML الثابتة باستخدام المزيد من توجيهات Apache. رمز كتابة المخزن المؤقت للإخراج خاص بالموقع ، ولكن فيما يلي إعادة كتابة mod التي أستخدمها (في ملف htaccess في الدليل الفرعي للمقالات)

أعد كتابة على
أعد كتابة/المقالات /
RewriteCond٪ {DOCUMENT_ROOT}/cache٪ {REQUEST_URI} -f
RewriteRule.؟/cache٪ {REQUEST_URI} [L]

هذا يقول بشكل أساسي أنه إذا كان الملف موجودًا في ذاكرة التخزين المؤقت ، فقم بإعادة التوجيه إليه وإيقاف إعادة الكتابة.

ثم في دليل ذاكرة التخزين المؤقت ، لدي إعدادات مثل:

ExpiresActive On
ExpiresByType text/html "access plus 1 day"
AddOutputFilterByType DEFLATE text/html

وأقوم بدمج هذا مع رمز في منطقة التحديث الخاصة بي يحذف محتوى /htdocs/cache/articles عند تعديل قالب الموقع أو محتوى المقالات.

يكمن جمال ذلك في أن Apache يعتني بجميع الطلبات الشرطية والضغط بالنسبة لي ، ولا أضرب PHP لكل طلب.

بالنسبة إلى الكود الديناميكي PHP ، أستخدم مكتبة الكل في واحد التالية التي تتعامل مع GZip Compression ، وتنتهي صلاحيتها ، و 304 إذا تم تعديل الردود منذ ، وما إلى ذلك:

http://alexandre.alapetite.fr/doc-alex/php-http-304/index.en.html

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

3
JasonBirch