جب آپ ویب براؤزر کے ذریعے کسی دوسرے ڈومین (Cross-Origin) سے ڈیٹا حاصل کرنے کی کوشش کرتے ہیں، تو براؤزر سیکیورٹی کے لیے Cross-Origin Resource Sharing (CORS) پالیسی کا نفاذ کرتا ہے۔ "CORS چیکر" ایک ایسا ٹول ہے جو آپ کو یہ سمجھنے میں مدد کرتا ہے کہ آیا کوئی ویب براؤزر آپ کے فراہم کردہ HTTP رسپانس ہیڈرز اور درخواست کی تفصیلات کی بنیاد پر کسی مخصوص کراس-اوریجن درخواست کی اجازت دے گا یا نہیں۔
یہ ٹول فرنٹ اینڈ ڈویلپرز، بیک اینڈ ڈویلپرز، API پلیٹ فارم ڈویلپرز، آپریشنز ڈویلپرز اور ہر اس شخص کے لیے ڈیزائن کیا گیا ہے جو یہ جاننا چاہتا ہے کہ آیا براؤزر کا کوڈ کسی مخصوص جواب کو پڑھ سکتا ہے یا کوئی OPTIONS جواب بعد کے طریقہ کار اور اس کے درخواست کردہ ہیڈر کے ناموں کو منظور کرتا ہے۔
ٹول کے ان پٹ اور ان کی حدود
اس ٹول کو درست تجزیہ کرنے کے لیے چند مخصوص معلومات درکار ہوتی ہیں جنہیں آپ ان پٹ فیلڈز میں فراہم کرتے ہیں:
- چیک کرنے کا جواب: آپ کو "اصل جواب" یا "پری فلائٹ جواب" میں سے کسی ایک کا انتخاب کرنا ہوتا ہے۔
- HTTP رسپانس ہیڈرز: یہ ایک ٹیکسٹ ان پٹ ہے جہاں آپ HTTP رسپانس ہیڈرز چسپاں کرتے ہیں۔ پری فلائٹ جوابات کی جانچ کرتے وقت اسٹیٹس لائن بھی چسپاں کرنا ضروری ہے۔ اس ان پٹ کی زیادہ سے زیادہ حد 200,000 حروف ہے۔
- اصل کی درخواست کریں۔: اس فیلڈ میں درخواست بھیجنے والی اصل (Origin) کی اسکیم، میزبان اور اختیاری پورٹ درج کی جاتی ہے، جیسے کہ
https://app.example.com۔ یہ ایک خالص اوریجن یاnullہونا چاہیے، جس میں URL کا راستہ (path)، کیوری پیرامیٹرز یا اسناد شامل کرنے کی اجازت نہیں ہے۔ - درخواست کردہ طریقہ: وہ HTTP طریقہ (جیسے GET، POST وغیرہ) جس کے لیے آپ پالیسی چیک کرنا چاہتے ہیں۔
- ہیڈر کے ناموں کی درخواست کی: یہ
Access-Control-Request-Headersسے حاصل کردہ ہیڈر کے نام ہیں جنہیں کوما یا لائنوں کے ذریعے الگ کر کے لکھا جاتا ہے، جیسے کہContent-Type، Authorization۔ - اسناد شامل کریں: ایک ٹوگل بٹن جو یہ ظاہر کرتا ہے کہ آیا درخواست میں کوکیز یا HTTP توثیق (Authentication) شامل ہے۔
ان پٹ میں غلطی کی صورت میں ٹول درج ذیل خرابیوں کے پیغامات دکھاتا ہے:
- اگر ہیڈر کا فیلڈ خالی ہو: "چیک کرنے سے پہلے HTTP جوابی ہیڈر چسپاں کریں۔"
- اگر ہیڈرز کی تعداد حد سے زیادہ ہو: "یہ ردعمل غیر معمولی طور پر بڑا ہے۔ اسے
‹max›حروف کے نیچے رکھیں۔" - اگر کوئی لائن غیر قانونی ہو: "لائن
‹line›ایک درست HTTP ہیڈر یا سٹیٹس لائن نہیں ہے۔" - اگر ہیڈر کا نام غلط ہو: "لائن
‹line›میں ایک غلط HTTP ہیڈر نام ہے۔" - اگر اوریجن کا فارمیٹ غلط ہو: "صرف ایک اسکیم، میزبان اور اختیاری پورٹ کے ساتھ ایک اصل درج کریں، جیسے https://app.example.com۔"
- اگر طریقہ کار کا نام غلط ہو: "ایک درست HTTP طریقہ ٹوکن درج کریں۔"
- اگر براؤزر اس طریقہ کار کی اجازت نہ دیتا ہو: "براؤزر fetch درخواستوں میں
‹method›طریقہ کی اجازت نہیں دیتے ہیں۔" - اگر درخواست کردہ ہیڈر کا نام غلط ہو: "
‹header›ایک درست HTTP درخواست ہیڈر کا نام نہیں ہے۔" - عام ان پٹ مسائل کے لیے: "نمایاں کردہ ان پٹ کو درست کریں اور دوبارہ کوشش کریں۔"
براؤزر کے فیصلے اور ان کی وجوہات
جب آپ معلومات فراہم کر کے چیک کرتے ہیں، تو ٹول تجزیہ کر کے "براؤزر کا فیصلہ" ظاہر کرتا ہے۔ اس کے ممکنہ نتائج درج ذیل ہو سکتے ہیں:
- پیسٹ کردہ CORS جواب کے ذریعے اجازت دی گئی۔
- پیسٹ کردہ CORS جواب سے مسدود۔
- ہیڈرز گزر جاتے ہیں، لیکن پری فلائٹ کی حیثیت نامعلوم ہے۔
- جواب درج کریں اور تفصیلات کی درخواست کریں، پھر CORS پالیسی چیک کریں۔ (جب کوئی ان پٹ نہ دیا گیا ہو)
- اس کی CORS پالیسی چیک کرنے کے لیے جواب چسپاں کریں۔ (ابتدائی حالت میں)
فیصلے کے ساتھ ٹول ان وجوہات کی تفصیل بھی فراہم کرتا ہے جو اس نتیجے کی بنیاد بنتی ہیں:
- اوریجن کی مماثلت: ٹول چیک کرتا ہے کہ آیا "Access-Control-Allow-Origin بالکل
‹origin›سے میل کھاتا ہے۔" یا "Access-Control-Allow-Origin اس درخواست کے لیے کسی بھی اصل کی اجازت دیتا ہے۔"۔ اگر یہ غائب ہو تو "Access-Control-Allow-Origin غائب ہے۔" کا پیغام ملتا ہے۔ اگر مماثلت نہ ہو تو "Access-Control-Allow-Origin‹actual›ہے،‹expected›نہیں۔" اور غلط قدر ہونے پر "Access-Control-Allow-Origin کی ایک غلط قدر ہے:‹value›۔" ظاہر ہوتا ہے۔ - اسناد (Credentials) کے قوانین: اگر اسناد شامل ہوں تو "Access-Control-Allow-Origin * نہیں ہو سکتا۔"۔ اسناد کی موجودگی میں "Access-Control-Allow-Credentials بالکل true ہے۔" ہونا ضروری ہے، ورنہ "ایک سند یافتہ درخواست کے لیے Access-Control-Allow-Credentials: true کی ضرورت ہے۔" کا پیغام ملتا ہے۔ اگر اسناد شامل نہ ہوں تو "اسناد شامل نہیں ہیں، لہذا Access-Control-Allow-Credentials اس فیصلے کو متاثر نہیں کرتا ہے۔" ظاہر ہوتا ہے۔
- پری فلائٹ اسٹیٹس: اگر اسٹیٹس درست ہو تو "پری فلائٹ اسٹیٹس
‹status›کامیاب ہے۔" کا پیغام ملتا ہے، ورنہ "پری فلائٹ اسٹیٹس‹status›ایک کامیاب 2xx اسٹیٹس نہیں ہے۔" ظاہر ہوتا ہے۔ اگر اسٹیٹس لائن موجود نہ ہو تو "کوئی HTTP سٹیٹس لائن پیسٹ نہیں کی گئی تھی، لہذا مطلوبہ 2xx پری فلائٹ سٹیٹس کو چیک نہیں کیا جا سکتا۔" کا پیغام ملتا ہے۔ - طریقہ کار کی اجازت: اگر طریقہ کار درست ہو تو "پری فلائٹ
‹method›کی اجازت دیتی ہے۔" یا "‹method›CORS سے محفوظ طریقہ ہے اور اسے Access-Control-Allow-Methods میں ظاہر ہونے کی ضرورت نہیں ہے۔" ظاہر ہوتا ہے۔ بصورت دیگر "Access-Control-Allow-Methods‹method›کی اجازت نہیں دیتا۔" کا پیغام ملتا ہے۔ - ہیڈرز کی اجازت: اگر ہیڈرز کی ضرورت نہ ہو تو "کسی بھی درخواست کردہ ہیڈر کے ناموں کو پری فلائٹ منظوری کی ضرورت نہیں ہے۔" ظاہر ہوتا ہے۔ اگر اجازت ہو تو "پری فلائٹ درخواست کردہ ہیڈر ناموں کی اجازت دیتی ہے:
‹headers›۔" یا "Access-Control-Allow-Headers: * بغیر اسناد کے درخواست کے لیے ان ناموں کا احاطہ کرتا ہے:‹headers›۔" ظاہر ہوتا ہے۔ اگر اجازت نہ ہو تو "Access-Control-Allow-Headers اجازت نہیں دیتا:‹headers›۔" کا پیغام ملتا ہے۔
اہم قوانین اور باریکیاں
CORS پالیسی کے نفاذ کے دوران براؤزر چند انتہائی سخت قوانین پر عمل کرتے ہیں جنہیں یہ ٹول بھی مدنظر رکھتا ہے:
| اصول کا زمرہ | تفصیل اور اثرات |
|---|---|
| اسناد اور وائلڈ کارڈ | جب درخواست میں اسناد (Cookies یا HTTP Authentication) شامل ہوں، تو Access-Control-Allow-Origin میں وائلڈ کارڈ * استعمال نہیں کیا جا سکتا۔ اس صورت میں وائلڈ کارڈز اپنے خاص معنی کھو دیتے ہیں۔ |
| متعدد اوریجنز | اگر Access-Control-Allow-Origin میں ایک سے زیادہ اقدار ہوں یا وہ کوما سے الگ کی گئی ہوں، تو براؤزر اسے غلط اور غیر قانونی تصور کرتا ہے۔ |
| Authorization ہیڈر | اگر درخواست میں Authorization ہیڈر شامل ہو، تو اسے Access-Control-Allow-Headers میں واضح طور پر لکھنا لازمی ہے۔ یہاں تک کہ اگر Access-Control-Allow-Headers: * موجود ہو، تب بھی یہ اس کا احاطہ نہیں کرتا۔ |
| پری فلائٹ اسٹیٹس | اگر پری فلائٹ جواب میں HTTP اسٹیٹس لائن موجود نہ ہو، تو پری فلائٹ چیک کا نتیجہ غیر یقینی (indeterminate) ہو جاتا ہے کیونکہ 2xx اسٹیٹس کی تصدیق ممکن نہیں رہتی۔ |
رازداری اور ڈیٹا پروسیسنگ
اس ٹول کو استعمال کرتے وقت آپ کی رازداری مکمل طور پر برقرار رہتی ہے۔ آپ کے ہیڈرز اور درخواست کی تفصیلات آپ کے براؤزر میں رہتی ہیں۔ BroBroGo پر کچھ بھی اپ لوڈ یا محفوظ نہیں کیا گیا ہے۔ یہ ٹول صرف آپ کے فراہم کردہ ڈیٹا کا مقامی طور پر تجزیہ کرتا ہے اور کسی بیرونی سرور سے رابطہ نہیں کرتا۔
اکثر پوچھے گئے سوالات (FAQ)
کیا مجھے اصل جواب یا پری فلائٹ جواب چسپاں کرنا چاہیے؟
یہ چیک کرنے کے لیے کہ آیا براؤزر کوڈ ایک جواب پڑھ سکتا ہے اصل جواب کا استعمال کریں۔ OPTIONS جواب کے لیے پری فلائٹ جواب استعمال کریں جو بعد کے طریقہ اور اس کے درخواست کردہ ہیڈر کے ناموں کو منظور کرتا ہے۔
وائلڈ کارڈ اسناد کے ساتھ کیوں ناکام ہو سکتا ہے؟
جب کوکیز یا HTTP کی توثیق شامل کی جاتی ہے، تو اجازت شدہ اصل درخواست کی اصل سے بالکل مماثل ہونی چاہیے۔ اجازت شدہ طریقوں اور ہیڈرز کے لیے وائلڈ کارڈز بھی وائلڈ کارڈ کے معنی کھو دیتے ہیں۔
کیا گزرنے والا نتیجہ ثابت کرتا ہے کہ لائیو درخواست کام کرے گی؟
نہیں، یہ نتیجہ صرف چسپاں جواب اور یہاں درج کردہ درخواست کی تفصیلات کا احاطہ کرتا ہے۔ ری ڈائریکٹس، کیشڈ جوابات، سرور کے قوانین میں تبدیلی، براؤزر کی توسیعات اور پری فلائٹ کے بعد اصل ردعمل اب بھی نتیجہ کو تبدیل کر سکتا ہے۔