خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت

حالیہ برسوں میں، فرنٹ اینڈ پروجیکٹس کو بہتر بنانے کے لیے زیادہ سے زیادہ پلیٹ فارمز خود میزبانی یا تیسرے فریق کے وسائل پراکسی کرنے کے مواقع فراہم کرتے ہیں۔ اکامائی آپ کو سیٹ کرنے کی اجازت دیتا ہے۔ مخصوص پیرامیٹرز خود تیار کردہ URLs کے لیے۔ Cloudflare میں Edge Workers ٹیکنالوجی ہے۔ فاسٹرزائن کر سکتے ہیں۔ دوبارہ لکھنا صفحات پر URLs تاکہ وہ سائٹ کے مرکزی ڈومین پر واقع تیسرے فریق کے وسائل کی طرف اشارہ کریں۔

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت

اگر آپ جانتے ہیں کہ آپ کے پروجیکٹ میں استعمال ہونے والی فریق ثالث کی خدمات اکثر تبدیل نہیں ہوتی ہیں، اور یہ کہ انہیں کلائنٹس تک پہنچانے کے عمل کو بہتر بنایا جا سکتا ہے، تو آپ شاید ایسی خدمات کو پراکسی کرنے کے بارے میں سوچ رہے ہیں۔ اس نقطہ نظر کے ساتھ، آپ بہت اچھی طرح سے ان وسائل کو اپنے صارفین کے قریب لا سکتے ہیں اور کلائنٹ کی طرف ان کی کیشنگ پر زیادہ مکمل کنٹرول حاصل کر سکتے ہیں۔ اس کے علاوہ، یہ آپ کو صارفین کو فریق ثالث کی سروس کے "کریش" یا اس کی کارکردگی میں کمی کی وجہ سے ہونے والی پریشانیوں سے بچانے کی اجازت دیتا ہے۔

اچھا: بہتر کارکردگی

کسی اور کے وسائل کی خود میزبانی بہت واضح طریقے سے کارکردگی کو بہتر بناتی ہے۔ براؤزر کو دوبارہ DNS تک رسائی کی ضرورت نہیں ہے، اسے TCP کنکشن قائم کرنے اور تیسرے فریق ڈومین پر TLS ہینڈ شیک کرنے کی ضرورت نہیں ہے۔ آپ مندرجہ ذیل دو اعداد و شمار کا موازنہ کرکے دیکھ سکتے ہیں کہ کس طرح کسی دوسرے کے وسائل کی خود میزبانی کارکردگی کو متاثر کرتی ہے۔

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
فریق ثالث کے وسائل بیرونی ذرائع سے ڈاؤن لوڈ کیے گئے ہیں (سے لیا گیا ہے۔ اس وجہ سے)

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
فریق ثالث کے وسائل اسی جگہ محفوظ کیے جاتے ہیں جیسے سائٹ کے باقی مواد (سے لیا گیا ہے۔ اس وجہ سے)

صورتحال اس حقیقت سے بھی بہتر ہوئی ہے کہ براؤزر HTTP/2 کنکشن سے ڈیٹا کو ملٹی پلیکس کرنے اور ترجیح دینے کی صلاحیت کا استعمال کرے گا جو پہلے ہی مین ڈومین کے ساتھ قائم ہو چکا ہے۔

اگر آپ فریق ثالث کے وسائل کی میزبانی نہیں کرتے ہیں، تو چونکہ وہ مرکزی سے مختلف ڈومین سے لوڈ کیے جائیں گے، اس لیے انھیں ترجیح نہیں دی جا سکتی۔ اس کی وجہ سے وہ کلائنٹ کی بینڈوڈتھ کے لیے ایک دوسرے سے مقابلہ کریں گے۔ اس کے نتیجے میں ایک صفحہ بنانے کے لیے اہم مواد کے لوڈ ہونے کا وقت ہو سکتا ہے جو مثالی حالات میں حاصل کیے جانے والے مواد سے کہیں زیادہ ہے۔ یہاں HTTP/2 ترجیحات پر بات کریں جو اس سب کی بہت اچھی طرح وضاحت کرتی ہے۔

یہ قیاس کیا جاسکتا ہے کہ بیرونی وسائل کے روابط میں صفات کا استعمال preconnect مسئلہ کو حل کرنے میں مدد ملے گی. تاہم، اگر مختلف ڈومینز پر اس طرح کے بہت سے لنکس موجود ہیں، تو یہ اصل میں انتہائی اہم لمحے میں کمیونیکیشن لائن کو اوورلوڈ کر سکتا ہے۔

اگر آپ فریق ثالث کے وسائل کی خود میزبانی کرتے ہیں، تو آپ کنٹرول کر سکتے ہیں کہ یہ وسائل کلائنٹ کو کس طرح دیے جائیں۔ یعنی، ہم مندرجہ ذیل کے بارے میں بات کر رہے ہیں:

  • آپ اس بات کو یقینی بنا سکتے ہیں کہ ڈیٹا کمپریشن الگورتھم جو ہر براؤزر کے لیے بہترین ہے استعمال کیا گیا ہے (Brotli/gzip)۔
  • آپ ان وسائل کے لیے کیشنگ کا وقت بڑھا سکتے ہیں جو عام طور پر خاص طور پر طویل نہیں ہوتے، یہاں تک کہ سب سے زیادہ معروف فراہم کنندگان کے ساتھ بھی (مثال کے طور پر، GA ٹیگ کے لیے متعلقہ قدر 30 منٹ پر سیٹ کی گئی ہے)۔

یہاں تک کہ آپ اپنی کیشنگ مینجمنٹ حکمت عملی (یو آر ایل ہیشز، ورژننگ وغیرہ) میں متعلقہ مواد کو شامل کر کے وسائل کے لیے TTL کو ایک سال تک بڑھا سکتے ہیں۔ ہم ذیل میں اس کے بارے میں بات کریں گے۔

▍ تھرڈ پارٹی سروسز کے آپریشن یا ان کے بند ہونے میں رکاوٹوں کے خلاف تحفظ

تیسری پارٹی کے وسائل کی خود میزبانی کا ایک اور دلچسپ پہلو یہ ہے کہ یہ آپ کو فریق ثالث کی خدمات کی بندش سے وابستہ خطرات کو کم کرنے کی اجازت دیتا ہے۔ آئیے فرض کریں کہ آپ جو تھرڈ پارٹی A/B ٹیسٹنگ حل استعمال کر رہے ہیں اسے بلاک کرنے والی اسکرپٹ کے طور پر لاگو کیا گیا ہے جو صفحہ کے ہیڈ سیکشن میں لوڈ ہوتا ہے۔ یہ اسکرپٹ آہستہ آہستہ لوڈ ہوتا ہے۔ اگر متعلقہ اسکرپٹ لوڈ ہونے میں ناکام ہو جاتا ہے، تو صفحہ خالی ہو جائے گا۔ اگر اسے لوڈ ہونے میں بہت زیادہ وقت لگتا ہے، تو صفحہ طویل تاخیر کے ساتھ ظاہر ہوگا۔ یا، فرض کریں کہ پروجیکٹ تھرڈ پارٹی CDN وسائل سے ڈاؤن لوڈ کی گئی لائبریری کا استعمال کرتا ہے۔ آئیے تصور کریں کہ اس وسائل کو ناکامی کا سامنا کرنا پڑا یا کسی خاص ملک میں بلاک کر دیا گیا تھا۔ اس طرح کی صورتحال سائٹ کی منطق کی خلاف ورزی کا باعث بنے گی۔

یہ جاننے کے لیے کہ جب کوئی بیرونی سروس دستیاب نہ ہو تو آپ کی سائٹ کیسے کام کرتی ہے، آپ اس پر SPOF سیکشن استعمال کر سکتے ہیں۔ webpagetest.org.

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
webpagetest.org پر SPOF سیکشن

▍براؤزرز میں مواد کی کیشنگ کے مسائل کے بارے میں کیا خیال ہے؟ (اشارہ: یہ ایک افسانہ ہے)

آپ سوچ سکتے ہیں کہ عوامی CDNs کا استعمال خود بخود وسائل کی بہتر کارکردگی کا باعث بنے گا، کیونکہ ان خدمات کے پاس کافی اعلیٰ معیار کے نیٹ ورک ہیں اور دنیا بھر میں تقسیم کیے جاتے ہیں۔ لیکن سب کچھ اصل میں تھوڑا زیادہ پیچیدہ ہے.

ہم کہتے ہیں کہ ہمارے پاس کئی مختلف سائٹس ہیں: website1.com، website2.com، website3.com۔ یہ تمام سائٹیں jQuery لائبریری کا استعمال کرتی ہیں۔ ہم اسے CDN کا استعمال کرتے ہوئے ان سے منسلک کرتے ہیں، مثال کے طور پر - googleapis.com۔ آپ براؤزر سے لائبریری کو ایک بار ڈاؤن لوڈ اور کیش کرنے کی توقع کر سکتے ہیں، اور پھر اسے تینوں سائٹوں پر استعمال کر سکتے ہیں۔ اس سے نیٹ ورک پر بوجھ کم ہو سکتا ہے۔ شاید یہ آپ کو کہیں پیسے بچانے اور وسائل کی کارکردگی کو بہتر بنانے میں مدد دے گا۔ عملی نقطہ نظر سے، سب کچھ مختلف نظر آتا ہے. مثال کے طور پر، سفاری نامی ایک خصوصیت ہے۔ ذہین ٹریکنگ کی روک تھام۔: کیشے دستاویز کے ماخذ اور فریق ثالث کے ذریعہ کی بنیاد پر دوہری کلیدوں کا استعمال کرتا ہے۔ یہاں اس موضوع پر اچھا مضمون۔

پرانے مطالعہ یاہو и فیس بککے ساتھ ساتھ زیادہ حالیہ مطالعہ پال کالوانو، دکھائیں کہ وسائل براؤزر کیچز میں اس وقت تک محفوظ نہیں کیے جاتے جب تک ہم توقع کر سکتے ہیں: "کسی پروجیکٹ کے اپنے اور فریق ثالث کے وسائل کے کیشنگ وقت کے درمیان ایک سنگین فرق ہے۔ ہم سی ایس ایس اور ویب فونٹس کے بارے میں بات کر رہے ہیں۔ یعنی، 95% مقامی فونٹس کی کیش لائف ایک ہفتے سے زیادہ ہوتی ہے، جب کہ 50% تھرڈ پارٹی فونٹس کی کیش لائف ایک ہفتے سے بھی کم ہوتی ہے! یہ ویب ڈویلپرز کو فونٹ فائلوں کی خود میزبانی کرنے کی ایک زبردست وجہ فراہم کرتا ہے!

نتیجے کے طور پر، اگر آپ دوسرے لوگوں کے مواد کی میزبانی کرتے ہیں، تو آپ کو براؤزر کیچنگ کی وجہ سے کارکردگی کا کوئی مسئلہ نظر نہیں آئے گا۔

اب جب کہ ہم نے فریق ثالث کی خود میزبانی کی خوبیوں کا احاطہ کر لیا ہے، آئیے اس کے بارے میں بات کرتے ہیں کہ اس نقطہ نظر کو برے سے کیسے بہتر طریقے سے نافذ کیا جائے۔

برا: شیطان تفصیلات میں ہے۔

فریق ثالث کے وسائل کو آپ کے اپنے ڈومین میں منتقل کرنا خود بخود اس بات کو یقینی بنائے بغیر نہیں کیا جا سکتا کہ ایسے وسائل کو مناسب طریقے سے کیش کیا گیا ہے۔

یہاں اہم مسائل میں سے ایک وقت کیشنگ ہے۔ مثال کے طور پر، ورژن کی معلومات تھرڈ پارٹی اسکرپٹ کے ناموں میں اس طرح شامل ہیں: jquery-3.4.1.js. اس طرح کی فائل مستقبل میں تبدیل نہیں ہوگی، اور اس کے نتیجے میں اس کی کیشنگ میں کوئی مسئلہ نہیں ہوگا۔

لیکن اگر فائلوں، کیشڈ اسکرپٹس کے ساتھ کام کرتے وقت کچھ ورژننگ اسکیم استعمال نہیں کی جاتی ہے، جس کے مواد تبدیل ہوتے ہیں جبکہ فائل کا نام تبدیل نہیں ہوتا ہے، پرانا ہو سکتا ہے۔ یہ ایک سنگین مسئلہ ہوسکتا ہے، کیونکہ یہ، مثال کے طور پر، خودکار حفاظتی پیچ کو اسکرپٹ میں شامل کرنے کی اجازت نہیں دیتا ہے جو کلائنٹس کو جلد از جلد وصول کرنے کی ضرورت ہے۔ ڈویلپر کو اس طرح کے اسکرپٹس کو کیشے میں اپ ڈیٹ کرنے کی کوشش کرنی ہوگی۔ اس کے علاوہ، یہ ایپلیکیشن کی ناکامی کا سبب بن سکتا ہے اس حقیقت کی وجہ سے کہ کلائنٹ پر کیشے سے استعمال ہونے والا کوڈ اس کوڈ کے تازہ ترین ورژن سے مختلف ہے جس کے لیے پروجیکٹ کا سرور حصہ ڈیزائن کیا گیا ہے۔

سچ ہے، اگر ہم ایسے مواد کے بارے میں بات کرتے ہیں جو اکثر اپ ڈیٹ ہوتے ہیں (ٹیگ مینیجر، A/B ٹیسٹنگ کے حل)، تو CDN ٹولز کا استعمال کرتے ہوئے انہیں کیش کرنا ایک ایسا کام ہے جسے حل کیا جا سکتا ہے، لیکن یہ بہت زیادہ پیچیدہ ہے۔ کمانڈرز ایکٹ جیسی سروسز، ایک ٹیگ مینجمنٹ حل، نئے ورژن شائع کرتے وقت ویب ہکس استعمال کرتی ہیں۔ یہ آپ کو CDN پر زبردستی کیش فلش کرنے کی صلاحیت دیتا ہے، یا اس سے بھی بہتر، ہیش یا یو آر ایل اپ ڈیٹ کو زبردستی کرنے کی صلاحیت دیتا ہے۔

▍کلائنٹس کو مواد کی انکولی ترسیل

اس کے علاوہ، جب ہم کیشنگ کے بارے میں بات کرتے ہیں، تو ہمیں اس حقیقت کو مدنظر رکھنے کی ضرورت ہے کہ CDN پر استعمال ہونے والی کیشنگ کی ترتیبات کچھ فریق ثالث کے وسائل کے لیے موزوں نہیں ہوسکتی ہیں۔ مثال کے طور پر، ایسے وسائل صارف ایجنٹ سنفنگ (اڈاپٹیو سرونگ) ٹیکنالوجی کا استعمال کر سکتے ہیں تاکہ مخصوص براؤزرز کو ان براؤزرز کے لیے خاص طور پر بہتر بنائے گئے مواد کے ورژن کے ساتھ پیش کیا جا سکے۔ یہ ٹیکنالوجیز براؤزر کی صلاحیتوں کا پتہ لگانے کے لیے ریگولر ایکسپریشنز، یا HTTP ہیڈر کی معلومات کے ڈیٹا بیس پر انحصار کرتی ہیں۔ User-Agent. ایک بار جب وہ جان لیں کہ وہ کس براؤزر کے ساتھ کام کر رہے ہیں، تو وہ اسے اس کے لیے ڈیزائن کردہ مواد دیتے ہیں۔

یہاں آپ کو دو خدمات یاد ہیں۔ پہلا googlefonts.com ہے۔ دوسرا polyfill.io ہے۔ گوگل فونٹس سروس براؤزر کی صلاحیتوں کے لحاظ سے مخصوص وسائل کے لیے مختلف سی ایس ایس کوڈ فراہم کرتی ہے unicode-range).

مختلف براؤزرز سے بنائے گئے گوگل فونٹس کے چند سوالات کے نتائج یہ ہیں۔

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
کروم سے گوگل فونٹس کے استفسار کا نتیجہ

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
IE10 سے گوگل فونٹس کے استفسار کا نتیجہ

Polyfill.io براؤزر کو صرف پولی فلز دیتا ہے جس کی اسے ضرورت ہے۔ یہ کارکردگی کی وجوہات کی بناء پر کیا جاتا ہے۔

مثال کے طور پر، آئیے ایک نظر ڈالیں کہ اگر آپ مختلف براؤزرز سے درج ذیل درخواست چلاتے ہیں تو کیا ہوتا ہے: https://polyfill.io/v3/polyfill.js?features=default

IE10 سے اس طرح کی درخواست کے جواب میں، 34 KB ڈیٹا موصول ہوگا۔ اور اس کا جواب، کروم سے پھانسی، خالی ہو جائے گا.

ناراض: کچھ رازداری کے تحفظات

یہ نکتہ ترتیب میں آخری ہے، لیکن کم از کم اہم نہیں۔ بات یہ ہے کہ پروجیکٹ کے مرکزی ڈومین یا اس کے ذیلی ڈومین پر فریق ثالث کے وسائل کی خود میزبانی صارفین کی رازداری کو خطرے میں ڈال سکتی ہے اور مرکزی ویب پروجیکٹ کو منفی طور پر متاثر کر سکتی ہے۔

اگر آپ کا CDN سسٹم درست طریقے سے ترتیب نہیں دیا گیا ہے، تو آپ اپنے ڈومین کی کوکیز کو تیسرے فریق کی خدمت کو بھیج سکتے ہیں۔ اگر سی ڈی این کی سطح پر مناسب فلٹرنگ کا اہتمام نہیں کیا گیا ہے، تو آپ کی سیشن کوکیز، جو عام طور پر جاوا اسکرپٹ میں استعمال نہیں کی جا سکتی ہیں (اس کے ساتھ httponly)، کسی غیر ملکی میزبان کو بھیجا جا سکتا ہے۔

یہ بالکل وہی ہے جو یولیرین یا کریٹو جیسے ٹریکرز کے ساتھ ہوسکتا ہے۔ فریق ثالث کے ٹریکرز نے کوکی میں ایک منفرد شناخت کنندہ سیٹ کیا ہو سکتا ہے۔ اگر وہ سائٹ کے مواد کا حصہ تھے، تو وہ شناخت کنندہ کو اپنی صوابدید پر پڑھ سکتے ہیں جب صارف مختلف ویب وسائل کے ساتھ کام کر رہا تھا۔

ان دنوں، زیادہ تر براؤزرز میں اس قسم کے ٹریکر رویے کے خلاف تحفظ شامل ہے۔ نتیجے کے طور پر، ٹریکرز اب ٹیکنالوجی کا استعمال کرتے ہیں CNAME کلوکنگ, مختلف منصوبوں کے لیے ان کے اپنے اسکرپٹ کے طور پر نقاب پوش۔ یعنی، ٹریکرز سائٹ کے مالکان کو ایک مخصوص ڈومین کے لیے اپنی ترتیبات میں CNAME شامل کرنے کی پیشکش کرتے ہیں، جس کا پتہ عام طور پر حروف کے بے ترتیب سیٹ جیسا لگتا ہے۔

اگرچہ ویب سائٹ کوکیز کو تمام ذیلی ڈومینز (مثال کے طور پر - *.website.com) پر دستیاب کرنے کی سفارش نہیں کی جاتی ہے، بہت سی سائٹیں ایسا کرتی ہیں۔ اس صورت میں، ایسی کوکیز خود بخود کسی بھیس میں تیسرے فریق کے ٹریکر کو بھیجی جاتی ہیں۔ نتیجے کے طور پر، ہم مزید کسی رازداری کے بارے میں بات نہیں کر سکتے۔

نیز، HTTP ہیڈر کے ساتھ بھی ایسا ہی ہوتا ہے۔ کلائنٹ-اشارے۔، جو صرف مرکزی ڈومین پر بھیجے جاتے ہیں، کیونکہ انہیں بنانے کے لیے استعمال کیا جا سکتا ہے۔ ڈیجیٹل فنگر پرنٹ صارف اس بات کو یقینی بنائیں کہ آپ جو CDN سروس استعمال کرتے ہیں وہ ان ہیڈرز کو صحیح طریقے سے فلٹر کرتی ہے۔

کے نتائج

اگر آپ جلد ہی فریق ثالث کے وسائل کی خود میزبانی کو نافذ کرنے کا منصوبہ بنا رہے ہیں، تو میں آپ کو کچھ تجاویز دیتا ہوں:

  • اپنی سب سے اہم JS لائبریریوں، فونٹس اور CSS فائلوں کی میزبانی کریں۔ اس سے سائٹ کی ناکامی یا کارکردگی میں کمی کا خطرہ کم ہو جائے گا کیونکہ سائٹ کے لیے ایک اہم وسیلہ تیسرے فریق کی سروس کی غلطی کی وجہ سے دستیاب نہیں ہے۔
  • CDN پر فریق ثالث کے وسائل کو کیش کرنے سے پہلے، اس بات کو یقینی بنائیں کہ ان کی فائلوں کو نام دیتے وقت کسی قسم کا ورژننگ سسٹم استعمال کیا جاتا ہے، یا یہ کہ آپ ان وسائل کے لائف سائیکل کو دستی طور پر یا خود بخود CDN کیش کو دوبارہ ترتیب دے کر منظم کر سکتے ہیں اسکرپٹ.
  • اپنے CDN، پراکسی سرور، اور کیشے کی ترتیبات کے بارے میں بہت محتاط رہیں۔ یہ آپ کو اپنے پروجیکٹ یا ہیڈرز کو کوکیز بھیجے جانے سے روکنے کی اجازت دے گا۔ Client-Hints تیسری پارٹی کی خدمات.

پیارے قارئین! کیا آپ اپنے سرورز پر دوسرے لوگوں کے مواد کی میزبانی کرتے ہیں جو آپ کے پروجیکٹس کے آپریشن کے لیے انتہائی اہم ہیں؟

خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت
خود میزبان تیسرے فریق کے وسائل: اچھا، برا، بدصورت

ماخذ: www.habr.com

نیا تبصرہ شامل کریں