انتهاء صلاحية تحميلات الوسائط الآمنة

نواجه عميلاً يعاني من مشاكل في تحميل الوسائط الآمنة.
يعمل هذا العميل على نسخة Discourse مبنية على Docker (نسخة رسمية) مع تمكين AWS S3 وتحميل الوسائط الآمنة.

يحتوي المنتدى على عدد من ملفات الصوت بصيغ mp3 و m4a.

يقوم Discourse تلقائيًا بتضمين مشغل جميل على النحو التالي:

image

المشكلة: ملفات الصوت لا تعمل بشكل موثوق. في بعض الأحيان لا تعمل.

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

لكن هذا لا يعمل بشكل جيد مع تحميل الوسائط الآمنة - إذا تركت الصفحة مفتوحة لفترة ثم ضغطت على زر التشغيل بعد دقيقة أو نحو ذلك، فإن ملف الصوت لا يعمل (دائمًا). في هذه المرحلة، يعيد AWS خطأ 403 Expired. يبدو أن الطلب لم يتم توقيعه في لحظة طلب الملف، بل في وقت سابق. تشير رسالة الخطأ بوضوح إلى أن الطلب قد انتهى في الماضي.

أشك في أن هذا يتعلق بالتأخير، لكنني لست متأكدًا بنسبة 100%. الحقيقة هي أن هذه المشكلة تحدث فقط لملفات الصوت (أي لا تحدث للصور المضمنة التي يتم تحميلها دائمًا على الفور).

نعم، وقت الخادم صحيح.

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

إعجابَين (2)

قد يكون ذلك بسبب كيفية تعامل المتصفحات مع وسوم الصوت والفيديو والقيمة الافتراضية لـ preload. هل الملفات طويلة بشكل خاص؟ حسب علمي، تقوم المتصفحات بالتنزيل باستخدام نطاقات البايت عند الطلب.

4 إعجابات

لا، ليست طويلة؛ الملفات صغيرة الحجم فقط (أقل من 5 ميجابايت) ولا يتم تنزيلها على فترات. ماذا تقصد بـ 'القيمة الافتراضية لـ preload؟

إذا كان لديك وسم <audio> أو <video>، فإن تعيين السمة preload=auto له سيوحي للمتصفح بتحميله بالكامل عند تحميل الصفحة، وبالتالي لن تواجه هذه المشكلة مع انتهاء صلاحية رابط S3 الموقّع.

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

6 إعجابات

لا توجد وسم <audio> صريح، بل يتم إنشاؤه تلقائيًا بواسطة Discourse عند إدراج ملف الصوت. بدون سمة preload.

الجزء الذي لا أفهمه: إذا كان المسار /secure-media-uploads يولد عنوان URL موقعًا، فلماذا يهم مقدار الوقت بين تحميل الصفحة واستدعاء المسار؟ بعد كل شيء، إنه يولد المسار الموقع ثم يعيد التوجيه فورًا إلى ذلك. ولكن يبدو أن الأمر مهم somehow. يبدو أن هناك شيئًا ما يتم تخزينه مؤقتًا أو شيء مشابه؟

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

أعتقد أن الهدف الكامل من هذه الميزة هو بالضبط ذلك: توفير عناوين URLs لا يمكن مشاركتها في مكان آخر لملفات التحميل، والطريقة الوحيدة لتحقيق ذلك هي استخدام عناوين URLs تنتهي صلاحيتها.

5 إعجابات

نعم، أنا أفهم ذلك. وموقت الانتهاء يبدأ العد في اللحظة التي يتم فيها استدعاء مسار /secure-media-uploads، وليس عند تحميل الصفحة.

ومع ذلك، يبدو أن الأمر مهم إذا تم تحميل الصفحة قبل وقت طويل من الوصول إلى المسار. وعندها ينهار النظام، بطريقة ما. أنا فقط لا أفهم لماذا يحدث هذا.

تم إصلاح هذه المشكلة الآن هنا FIX: Disable preloading audio + video when secure media enabled (#8922) · discourse/discourse@7ff58f1 · GitHub @RGJ. كانت المشكلة تحدث لأن المتصفحات ترسل طلبًا أوليًا لملفات الصوت والفيديو للحصول على بيانات التعريف الخاصة بالملف، مثل المدة. ومع ذلك، وبسبب عنوان URL الموقع الموقّع الآمن، بدأ هذا الطلب الأولي عداد انتهاء الصلاحية لمدة 15 ثانية، لذا عندما حاول المستخدمون تشغيل الصوت والفيديو بعد هذه الفترة، تلقينا خطأ 403 من AWS.

لقد قمنا الآن بتعطيل التحميل المسبق للفيديو والصوت عند تمكين الوسائط الآمنة. ستحتاج المنشورات الحالية التي تحتوي على صوت وفيديو إلى إعادة بناء HTML الخاص بها لملاحظة هذا التغيير.

13 إعجابًا