العربية

الفيديو والترجمات · أداة تنزيل الصور المصغرة من YouTube وعارض البيانات الوصفية

كيف يحفظ المتصفح صورة ذات أصل مشترك: الجلب وعناوين URL Blob والتنزيل

· كيف يعمل

يوتيوب جافا سكريبت كورس

جهاز التحكم عن بعد JPEG يصبح متصفح Blob وتنزيلًا محليًا
الرسم التوضيحي المتجه الأصلي ToolAcre

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

فتحت سمة التنزيل الصورة بدلاً من حفظها، وهي ميزة التقاط عبر الأصل

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

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

لماذا تتجاهل المتصفحات التنزيل من مصادر أخرى - قرار أمني وعواقبه

تقيد المتصفحات التنزيلات عبر الأصل لأنه لا ينبغي للصفحة إعادة تسمية وحفظ الموارد البعيدة التعسفية بصمت. يعتمد السلوك على الاستجابة عن بعد وعلاقة الأصل، لذا فإن الارتباط البسيط ليس حفظًا عالميًا للملفات API. لا يمكن للسمة `download` وحدها أن تضمن حفظ صورة YouTube البعيدة بالاسم المحلي المطلوب.

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

مسار الجلب والنقطة — جلب بايتات الصورة، وتغليفها في فقاعة كبيرة وإنشاء فقاعة كبيرة من نفس الأصل: URL

بالنسبة إلى JPEG، يقوم المسبار Thumbnail بإجراء CORS GET مجهول الهوية، وتحويل الاستجابة الناجحة إلى كائن ثنائي كبير الحجم وفك ترميز الأبعاد. يتم الاحتفاظ بـ Blob القابل للاستخدام في النتيجة، بينما يتم تجاهل العناصر النائبة بحيث لا يمكن أن تتنكر على أنها تنزيلات. وبالتالي فإن زر التنزيل يمثل وحدات البايت التي تم التحقق منها في الذاكرة، وليس الثقة المستنتجة من اسم الملف أو HTTP 200 وحده.

يمكن للكائن URL بعد ذلك أن يمثل كائن Blob الموجود في الذاكرة لإجراء حفظ محلي. هذا لا يجعل الجلب الأصلي محليًا؛ قامت Google بتوفير وحدات البايت مباشرة إلى المتصفح بعد عملية الجلب. عنوان `blob:` عبارة عن مؤشر متصفح مؤقت لنص الاستجابة هذا، وليس مرآة مستضافة بواسطة ToolAcre أو حق ممنوح حديثًا للصورة المصدر.

CORS يسمح بـ JPEG تنزيلات الجلب والبيانات الكبيرة الكبيرة؛ WebP يظل مرتبطًا فقط

كان المخطط التفصيلي المضمن CORS عبارة عن بوابة عامة واحدة، ولكن سلوك الشحن خاص بالتنسيق. JPEG يعمل تنزيل الجلب والبلوب؛ يتم تقديم المسار /vi_webp/ بدون الرأس المشترك المطلوب، لذلك يوفر ToolAcre WebP كارتباط فقط. يجب على المراجع اختبار عائلتي المسار بشكل منفصل بدلاً من تعميم رؤوس الاستجابة JPEG على كل تنسيق صورة مصغرة.

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

تسمية الملف المحفوظ - لماذا يجب على برنامج التنزيل تسميته بمعرف الفيديو وحجمه حتى تظل الملفات قابلة للتعريف

تستخدم أسماء JPEG التي تم تنزيلها youtube-VIDEO_ID-VARIANT.jpg. يأتي كل من المعرف والمتغير من الحروف الهجائية التي تم التحقق من صحتها، مما يمنع فواصل المسار أو أحرف التحكم العشوائية من إدخال اسم الملف المقترح. وبالتالي فإن حفظ `maxresdefault` و`hq2` من عملية بحث واحدة يجب أن يؤدي إلى إنتاج أسماء مميزة ويمكن التنبؤ بها ويمكن مطابقتها مرة أخرى مع صفوف النتائج الخاصة بها.

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

مثال عملي: حفظ حجمين مصغرين لفيديو واحد - تسلسل الطلبات والملفات الناتجة

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

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

ما لا يغطيه هذا هو التنزيلات المجمعة عبر العديد من مقاطع الفيديو والمضيفين الذين يحظرون عمليات القراءة المشتركة

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

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

JPEG جلب وإعادة استخدام Blob وتنزيله - مع الاحتفاظ بـ WebP كرابط

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

وكانت النتيجة غير متماثلة بشكل متعمد: يمكن أن تصبح JPEG بايت التي تم التحقق منها تنزيلات Blob، بينما تظل عناوين URL الخمسة للملصقات WebP روابط خارجية لأن استجاباتها تفتقر إلى إذن CORS. يجب أن تحافظ الواجهة على تلك الحدود الصادقة. يمكن للمستخدمين فتح أو نسخ عنوان WebP، ولكن لا يمكن لـ ToolAcre أن يعد بملف WebP محلي تمت إعادة تسميته من وحدات البايت التي يمنعه المتصفح من قراءتها.