لقد كنت أواجه مشكلة منذ فترة ولم يُبلغ عنها أحد حتى الآن. أعتذر عن تعقيد الأمر، لكنني سأحاول وصفه بإيجاز.
باختصار شديد: عند لصق رابط في رسالة، ترسل مكتبة Ruby Gem التي تقوم في النهاية بطلب HTTP GET إلى ذلك الرابط للبحث عن بيانات التضمين طلبًا HTTP يُعتبر غير صالح وفقًا للمواصفات من قبل بعض وكلاء HTTP. وهذا يمنع عمل المعاينات في بعض الحالات:
والنسخة الأطول قليلًا هي كالتالي: نستخدم خدمة لطيفة تسمى Gitbook.io لتوثيقنا. Gitbook هي حل مستضاف ويستخدمون عمال Cloudflare لإعادة التوجيه الداخلي على موقعهم. تتضمن بعض عمال Cloudflare استخدام واجهة برمجة تطبيقات Node Fetch لتمرير طلبات HTTP. مطورو Node Fetch صارمون جدًا في اتباع المواصفات، وسيقومون برفض أي طلب GET يحتوي على جسم HTTP أو حتى رأس Content-Length، حتى لو كان هذا الرأس مضبوطًا على 0.
وهذا بالضبط ما يحدث. ترسل مكتبة Ruby التي تقوم بطلب HTTP رأس طلب
Content-Length: 0
وهذا يغضب وكيل Node Fetch بشدة وينتهي الأمر برفض الطلب من الخادم البعيد. كانت هناك مناقشات كثيرة في منتديات مختلفة حول ما إذا كان جسم الطلب على GET أو حتى مجرد رأس Content-Length صالحًا وفقًا لمواصفات HTTP. ليس لدي مشكلة في ذلك، لكن هذا لم يمنع مطوري Node Fetch من إغلاق كل مشكلة تم فتحها سابقًا تطلب منهم السماح بهذا الدلالي.
للأسف، أنا عالق في المنتصف هنا.
- مشروع Node Fetch يرفض اعتبار هذه الطلبات HTTP صالحة.
- دعم Cloudflare يرفض مساعدتي لأنني لا أتحكم في عمال Node المعنيين.
- دعم Gitbook يرفض مساعدتي لأنهم يتفقون مع مطوري Fetch (ولست متأكدًا من اهتمامهم الحقيقي).
- ومكتبة HTTPrb ترفض إزالة الرأس لأنهم يعتقدون أنه صالح تمامًا.
لذا، لا يسعني سوى النشر هنا والسؤال عما إذا كان هناك أي طريقة للتحكم في طلبات HTTP GET المُنشأة للمعاينات أو تغييرها لتشمل مجموعة مقبولة من رؤوس HTTP بحيث لا ترفض الوكلاء التي تستخدم مكتبات صارمة للغاية مثل Node Fetch هذه الطلبات؟
إذا أردت التجربة، إليك عنوان URL مثال يستضاف على خوادم Gitbook ويستخدم عامل Cloudflare المدعوم بـ Node Fetch الخاص بهم.



