لا `Referer:`، لا تضمين

مرحبًا،

نحن نستخدم تضمين Discourse في Jekyll على New ROOT Web Site! - ROOT - ويعمل بشكل رائع! ما لم يكن المتصفح يقوم بكتم رأس Referer:، وفي هذه الحالة نحصل على 400 Bad Request. جرب بنفسك - إذا قمت بالتبديل إلى نافذة Firefox خاصة (التي تكتم مراجع الإحالة) فإن التضمين يتعطل. الأمر نفسه ينطبق على Safari الذي يبدو أنه أكثر صرامة في إصدار مراجع الإحالة.

لقد قمت بالتحقق من ذلك بمراجعة New ROOT Web Site! - Blog - ROOT Forum في نافذة Firefox خاصة، مما أعطاني HTTP 400؛ ثم قمت بتعديل الطلب لإضافة Referer: https://root.cern/blog/new-web-site/ - فتتحول استجابة 400 إلى 200 سعيدة.

لدينا خيار “تضمين أي أصل” مفعّل. لدينا تعليقات لموقع تضمين واحد بالضبط. هل هناك طريقة يمكننا من خلالها جعل ذلك يعمل؟

تحياتي، أكسل.

نعم، يمكنني تكرار ذلك.

من المثير للاهتمام أن التعليقات المضمنة في https://blog.codinghorror.com/the-cloud-is-just-someone-elses-computer/ تعمل دون مشاكل في نافذة فايرفوكس الخاصة. هل يمكن أن تكون المشكلة مرتبطة بالنطاق؟ مدونتك على root.cern ونموذجك على root-forum.cern.ch.

مرحبًا سيمون،

شكرًا لك على النظر في هذا! قد يكون الأمر مرتبطًا حقًا بالاختلاف في أسماء النطاقات: يمكنني تخيل أن المتصفحات قد توفر مراجع لطلب موجه إلى نفس النطاق، ولكن ليس إلى نطاق مختلف. ولكن بينما هذا الأمر مثير للاهتمام، إلا أنني لا أرى بعد ما يمكننا فعله لحل هذه المشكلة - فلن نتمكن من استخدام root.cern كنطاق للمنتدى، وكان دمج النطاقات عبر نطاقات مختلفة يبدو ميزة رئيسية ومفيدة للغاية… هل هذا الأمر معرض للخطر ببساطة في هذه الأيام نظرًا لتحسين الخصوصية، أم يمكنك التفكير في طريقة للخروج؟

شيء قد أرغب في تجربته هو استخدام وكيل عكسي من root.cern/forum إلى root-forum.cern.ch. بهذه الطريقة، يمكن إجراء الدمج كما لو كان على نفس المضيف، ونحافظ على المراجع…؟ سأعود :slight_smile:

تحياتي،
أكسل

مرحبًا،

لدي الآن حل أبسط بكثير. يُرجى الإشارة إلى هذا في Embed Discourse comments on another website via Javascript :

للتضمين عبر المواقع، أضف في صفحات التضمين إما

  • <meta name="referrer" content="strict-origin"> مع تعيين Path Allowlist إلى /.* (لأنه لن يتم توفير مسار)، أو
  • <meta name="referrer" content="no-referrer-when-downgrade"> مع تعيين Path Allowlist الفعلي.

كما ذُكر في https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy، “هناك جهود من المتصفحات للانتقال إلى قيمة افتراضية أكثر صرامة”، ويعتمد تضمين Discourse على القيمة الافتراضية القديمة للتضمين عبر المضيفين.

تحياتي، أكسل.

نظرًا لأن هذا سيصبح المعيار الافتراضي لمتصفح Chrome بدءًا من الإصدار 85 فصاعدًا (A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin  |  Blog  |  Chrome for Developers)، هل يجب أن ننظر في بديل هنا؟

هل يمكننا قبول الطلبات التي تستوفي جميع الشروط الثلاثة التالية:

  • يحتوي الطلب على كل من discourseEmbedUrl و Referer
  • تم تعيين الـ referer إلى أصل discourseEmbedUrl
  • يتطابق discourseEmbedUrl مع إحدى قواعد التضمين

أعتقد أن تمرير discourseEmbedUrl سيكون أمرًا سهلاً بالنسبة لغالبية المستخدمين.

تنبيه فقط، تيجاس - حسب علمي، بدون وسم meta، يقوم متصفح سفاري وفايرفوكس/الوضع الخاص بحجب رأسية Referer بالكامل. ما تقترحه قد يعمل مع كروم >= 85، لكن إضافة وسم meta تبدو أكثر قوة وعامة، وأعتقد أنها بسيطة بما يكفي لمعظم التضمينات.