نجات هزاران آیکون GIF از پشت یه ایمیجمپ سمت سرور
خلاصهٔ کاملتر
ماجرا با یه درخواست کمک شروع میشه: کاربری به اسم GlitchyZorua میخواست از مرورگر آیکون Ibiblio — مجموعهای از هزاران آیکون GIF که تو دههٔ نود گردآوری شده — یه نسخهٔ آرشیوی بگیره و گیر کرده بود. ساختار سایت روی کاغذ ساده به نظر میرسه: یه صفحهٔ فهرست، ۲۴ زیرفهرست، ۵۷ صفحهٔ دایرکتوری، ۱۱۴ مجموعه و در نهایت هزاران آیکون که بیشترشون ۳۲ در ۳۲ پیکسلن.
گره کار جای دیگهایه. چیزی که شبیه لینکه در واقع یه ایمیجمپه — و از نوع سمت سرور. تو ایمیجمپ سمت کلاینت، خود HTML مختصات نواحی و مقصدشون رو داره؛ ولی اینجا هیچ آدرسی از فایلهای GIF تو صفحه نیست. ایندکس دایرکتوری هم غیرفعاله، پس نمیشه اسم فایل رو از انتهای URL برداشت و پوشه رو دید. نویسنده میگه حتی archive.org هم نتونسته بود مجموعهٔ کامل رو جمع کنه.
راهحل از هندسهٔ صفحه درمیاد. گشتن تو سایت نشون میده آیکونها همیشه تو یه شبکهٔ حداکثر ۸ در ۸ چیده شدن و هر خانه با اطلاعات اندازهاش دقیقاً ۷۲ در ۸۹ پیکسل جا میگیره. سرور هم آپاچیه و احتمالاً از ماژول ایمیجمپ استفاده میکنه، یعنی یه فایل پیکربندی جایی روی سرور هست که جفتمختصاتها رو به آدرس مقصد نگاشت میکنه.
به اون فایل دسترسی نیست، ولی میشه محتواش رو استنتاج کرد. اگه هر ناحیهٔ کلیک ۷۲ در ۸۹ پیکسل باشه، مرکز خانهٔ بالا-چپ میشه ۳۶ و ۴۴؛ بعد کافیه همینطور ۷۲ تا ۷۲ تا به محور افقی و ۸۹ تا ۸۹ تا به محور عمودی اضافه کنی تا مرکز همهٔ خانهها دربیاد. نویسنده برای هر کتابخونه و هر جفت مختصات یه درخواست HEAD میفرسته و هر جا کد ۳۰۲ برگشت، هدر Location رو ثبت میکنه — همون آدرس واقعی فایل.
با این کار آدرس تکتک GIFها درمیاد و بقیهاش دانلود سادهست. ولی نویسنده یه قدم جلوتر رفته: یه سایتساز ایستای خیلی ساده با Ruby و قالبهای ERB نوشته که همون گالری رو با صفحهبندی مشابه نسخهٔ اصلی و یه جستوجوی سمت کلاینت بازتولید میکنه — این بار بدون ایمیجمپ سمت سرور.
نتیجه هم روی ibiblio-icon-archive.danq.dev در دسترسه و کل مخزن هم قابل کلون کردنه اگه فقط خود آیکونها رو بخوای. نویسنده با خنده میگه ظاهرش سنوسالش رو نشون میده، ولی حداقل حالا برای دنیا قابل دسترسیه و میشه برای آیندگان آرشیوش کرد.
نکات کلیدی:
- ایمیجمپ سمت سرور آدرس مقصد رو تو HTML نمیذاره، پس خزندهها گیر میکنن
- وقتی چیدمان منظم باشه، میشه مختصات نواحی کلیک رو استنتاج کرد
- درخواست HEAD و خوندن هدر Location، آدرس واقعی فایل رو لو میده
- خروجی کار یه گالری ایستای تازه با جستوجوی سمت کلاینت شد
- حتی archive.org هم نتونسته بود نسخهٔ کاملی از این مجموعه بگیره




