العربية

الفيديو والترجمات · تنزيل الوسائط المباشرة

لماذا يمكن لـ CORS منع التنزيل المباشر في المتصفح، وماذا يعني ذلك

· كيف يعمل

كورس http التنزيلات

طلب متصفح يلبي حد الاستجابة عبر الأصل في مضيف الوسائط
الرسم التوضيحي المتجه الأصلي ToolAcre

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

يعمل الرابط في علامة تبويب جديدة ولكنه يفشل في الأداة — اللغز الذي يخلقه خطأ CORS للمستخدمين

قد يتم تشغيل غلاف البودكاست عند إدخاله في شريط العناوين ولكنه يفشل عندما تحاول الصفحة قراءته باستخدام ميزة الجلب. يعد التنقل والقراءة النصية من صلاحيات المتصفح المختلفة. يعرض الأول موردا؛ والثاني يمكن أن يعرض وحدات البايت الخاصة به للتعليمات البرمجية التي تعمل على أصل آخر.

يحتاج Direct Media Downloader إلى القوة الثانية لأنه يقرأ أجزاء الاستجابة، ويبلغ عن التقدم، ويبني Blob، ويقدم حفظًا مسمىًا. عندما لا يشترك مضيف الوسائط في القراءة المشتركة الأصل، يتوقف المتصفح JavaScript عن تلقي الاستجابة على الرغم من أن التنقل العادي قد لا يزال يعمل. يفسر نفس التمييز لماذا يمكن أن يؤدي نسخ العنوان إلى تطبيق آخر إلى نتيجة مختلفة دون أن يقوم أي من التطبيقين بتغيير الملف البعيد.

سياسة الأصل نفسه في فقرة واحدة - لماذا لا تستطيع الصفحة الموجودة على toolacre.com قراءة وحدات البايت المقدمة من أصل آخر بحرية

يجمع الأصل بين المخطط واسم المضيف والمنفذ. الصفحة التي يتم تقديمها من ToolAcre والملف الذي يتم تقديمه من الناشر CDN عادة ما يكون لهما أصول مختلفة. تمنع سياسة المصدر نفسه البرنامج النصي الخاص بأصل واحد من قراءة ردود أصل آخر بحرية، مما يحمي البيانات المكشوفة من خلال الوصول إلى المتصفح المحيط.

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

ما يفعله Access-Control-Allow-Origin — كيف يقرر مضيف الملف، وليس الأداة، ما إذا كان المتصفح يمكنه تسليم وحدات البايت أم لا

يمكن للخادم البعيد الاشتراك عن طريق إرجاع رأس `Access-Control-Allow-Origin` المناسب. ينتمي هذا القرار إلى تكوين مضيف الملف. لا يمكن لـ ToolAcre إضافة الرأس إلى استجابة شخص آخر، ولا يمكن لخيار الطلب منح الإذن الذي حجبه الخادم المتلقي.

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

القراءات المحظورة عبر الأصل ولماذا لا يتلقى البرنامج النصي أي استجابة قابلة للحفظ

يستخدم برنامج التنزيل وضع الجلب العادي CORS بدلاً من `no-cors`. في حالة القراءة ذات الأصل المشترك المرفوضة، يتم رفض الجلب ولا يتلقى رمز التطبيق أي رؤوس أو نص قابل للاستخدام. تقوم الأداة بالإبلاغ عن فئة `CORS_OR_NETWORK` المدمجة لأن المتصفحات لا تكشف عن قصد تفاصيل كافية لتمييز CORS عن كل فشل في النقل.

تنتمي الاستجابات المعتمة إلى طلبات `no-cors` الصريحة، لكن هذا الوضع لن يحل هذه المهمة: لا يمكن لـ JavaScript فحص جسم معتم وتحويله إلى الكائن الثنائي الكبير المقصود. ولذلك يفشل التنفيذ بصراحة بدلاً من الحصول على استجابة غير قابلة للقراءة والتظاهر بأنه يمكنه إنقاذه. نظرًا لأن التطبيق لا يحصل أبدًا على تلك البايتات المخفية، فلا يمكنه حساب التقدم بصدق، أو استنتاج اسم ملف من الرؤوس المحمية، أو إنشاء كائن مفيد URL منها.

مثال عملي: قراءة الطلب الفاشل في لوحة الشبكة - اكتشاف الرأس المفقود والتأكد من عدم الاتصال بخادم الترحيل

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

يعد الفحص الفاشل دليلاً بالفعل على أنه تمت محاولة تقديم طلب حقيقي. لا يوجد صف ToolAcre API يحمل URL الذي تم لصقه ولا يوجد طلب ترحيل ثانٍ. إذا كان المضيف يسمح بـ HEAD بشكل سيئ، فقد يظل التنزيل يتصرف بشكل مختلف لأنه يستخدم GET، ولكن لا يقوم أي من المسارين بتبديل البنية بصمت. تختلف صياغة وحدة التحكم بين المتصفحات، لذا احتفظ بأدلة الصفوف والرأس الفاشلة بدلاً من الاعتماد على صياغة بائع واحد لتقرير تشغيلي.

لماذا لا تتجول الأداة حولها - يعني الوكيل إرسال الرابط الخاص بك إلى الخادم، وهو بالضبط ما وعدت الأداة بعدم القيام به

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

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

ما لا يغطيه هذا — CORS ليس مثل 403، أو جدار تسجيل الدخول أو URL منتهية الصلاحية.

فشل CORS ليس HTTP 403، على الرغم من أنه يمكن لأي منهما إيقاف سير العمل. 403 هي حالة الاستجابة التي اختارها المضيف؛ يمكن أن يتسبب التوقيع منتهي الصلاحية في حدوث ذلك. يحتاج جدار تسجيل الدخول إلى بيانات اعتماد تحذفها هذه الأداة. يمكن أن يؤدي انقطاع الشبكة، وفشل DNS، ومشكلات الشهادة إلى مشاركة رفض الجلب العام للمتصفح.

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

الخلاصة: CORS هو قرار من جانب المضيف - كيف يقوم برنامج Direct Media Downloader بالإبلاغ عنه بأمانة بدلاً من الرجوع بصمت إلى الخادم

يتم التحكم في CORS من خلال مضيف الوسائط. يمكن لبرنامج التنزيل الموجود على المتصفح فقط الالتزام بهذا الاختيار وشرحه والتوقف؛ ولا يمكن تجاوز الاختيار من رمز العميل. هذا الحد غير مناسب على وجه التحديد لأنه يمنع الصفحات العشوائية من أن تصبح قارئات عالمية عبر المواقع.

استخدم عنصر التحكم في التنزيل المقدم من المضيف، أو اطلب ملفًا معتمدًا ممكّنًا CORS، أو استخدم رابط الحفظ الأصلي عندما يكون ذلك مناسبًا. يفي برنامج Direct Media Downloader بوعده من خلال الكشف عن الرفض والحفاظ على المسار المباشر من المتصفح إلى المضيف، وليس عن طريق إخفاء الخادم خلف زر أكثر نجاحًا. ولذلك يجب أن تأتي النتيجة الناجحة من مضيف تعاوني أو منشأة متصفح شرعية مختلفة، وليس من قمع نص الخطأ مع الاحتفاظ بنفس القراءة المرفوضة.