حالة تسجيل الدخول غير متسقة خلف Fastly

أواجه مشكلة غريبة بعض الشيء، ولكن هناك العديد من العوامل المؤثرة.

المشكلة:

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

أما عند التنقل مباشرة إلى منشور معين، فإن حالة تسجيل الدخول تظهر بشكل صحيح، وتعمل انتقالات pushstate اللاحقة، بما في ذلك الانتقال إلى الصفحة الرئيسية. ومع ذلك، فإن إعادة تحميل الصفحة الرئيسية ستؤدي إلى ظهورها وكأن المستخدم غير مسجل (كما هو موضح أعلاه).

الخلفية:

أستخدم منصة Discourse بالكامل خلف خدمة Fastly، باستثناء وظيفة الاستطلاع (polling) التي تتواصل مباشرة مع مثيل حسابي في Google Cloud Compute.

أعتقد أن المشكلة تتعلق بطبقة التخزين المؤقت، لكنني كنت حريصًا جدًا على قراءة المناقشات في هذا المنتدى. لا أملك تمكين ضغط GZIP التلقائي من Fastly.

المنتدى موجود هنا وهذا فيديو يوضح المشكلة.

بعد إجراء تحقيق أعمق، أعتقد أن المشكلة قد تكون مرتبطة بوقت احتواء رأس استجابة Cache-Control على القيم no-cache, no-store مع عدم احترام Fastly لهذه القيم.

كانت شبكة توصيل المحتوى (CDN) الخاصة بـ Fastly تصنف ما بدا وكأنه نسخة من الصفحة الرئيسية بدون JavaScript لروبوت الزحف على أنها “HIT”، وذلك لأنها يجب أن تكون قد زُفرت بقيم no-cache, no-store.

تقترح Fastly إضافة Expires: 0 في حالات مثل هذه.

لقد قمت بتطبيق ذلك كما هو موصى به في وثائق Fastly حتى الآن.