CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) কী?
CORS হলো একটি মেকানিজম যা ব্রাউজার এবং সার্ভারের মধ্যে নির্দিষ্ট পলিসির মাধ্যমে ডোমেইন ক্রস করে ডেটা শেয়ারিংয়ের অনুমতি দেয়। সাধারণত, ব্রাউজার Same-Origin Policy অনুসরণ করে, যা ব্রাউজারকে কেবলমাত্র একই ডোমেইন থেকে আসা রিসোর্স অ্যাক্সেস করার অনুমতি দেয়। কিন্তু CORS এই পলিসিকে শিথিল করে, যাতে এক ডোমেইন থেকে আরেক ডোমেইনের ডেটা অ্যাক্সেস করা যায়।
১. Origin Definition
একটি URL-এর প্রোটোকল, ডোমেইন এবং পোর্টের সমন্বয়ে অরিজিন তৈরি হয়। উদাহরণস্বরূপ:
http://example.com:8080/foo
এখানে প্রোটোকল হলো http
, ডোমেইন হলো example.com
, পোর্ট হলো 8080
, এবং পথ (path) হলো /foo
। একসাথে এই উপাদানগুলো অরিজিন সংজ্ঞায়িত করে।
২. সেইম-অরিজিন পলিসি (Same-Origin Policy)
ব্রাউজার Same-Origin Policy অনুসরণ করে। এটি বিভিন্ন ডোমেইনের মধ্যে ডেটা বিনিময় বাধা দেয়, যাতে ম্যালিশিয়াস সাইট থেকে নিরাপত্তা ঝুঁকি এড়ানো যায়। উদাহরণস্বরূপ, যদি evil.com
সাইট FB.com
সাইট থেকে ডেটা অ্যাক্সেস করতে চায়, তবে ব্রাউজার Same-Origin Policy অনুসারে এটিকে ব্লক করবে।
৩. CORS হেডারস কীভাবে কাজ করে?
সার্ভার যখন ক্রস-অরিজিন থেকে রিকুয়েস্ট গ্রহণের অনুমতি দেয়, তখন CORS হেডারস সেট করে। উদাহরণস্বরূপ, যদি messenger.com
সাইট FB.com
সাইটের কিছু ডেটা অ্যাক্সেস করতে চায়, তবে FB.com
সার্ভার CORS হেডার দিয়ে জানাবে যে এই ডোমেইনের অ্যাক্সেস অনুমোদিত।
৪. Access-Control-Allow-Origin
এই হেডারটি সার্ভার থেকে ক্লায়েন্টকে জানায় যে কোন ডোমেইন থেকে এই ডেটা অ্যাক্সেস করা যাবে। উদাহরণস্বরূপ, example.com
ডোমেইন শুধুমাত্র নির্দিষ্ট অ্যাপ্লিকেশন থেকে ডেটা অ্যাক্সেসের অনুমতি দেয়ার জন্য Access-Control-Allow-Origin
হেডার ব্যবহার করে।
৫. Access-Control-Allow-Credentials
যদি একটি রিকুয়েস্টে কুকিজ অন্তর্ভুক্ত থাকে এবং এই রিকুয়েস্টে সার্ভারকে কুকিজ গ্রহণের অনুমতি দিতে হয়, তবে Access-Control-Allow-Credentials
হেডার ব্যবহার করতে হবে। এটি না থাকলে ব্রাউজার রিকুয়েস্টটি বাতিল করবে।
৬. Preflight Request
কোনো Sensitive Request পাঠানোর আগে ব্রাউজার একটি Preflight Request পাঠায়, যাতে সার্ভার থেকে প্রয়োজনীয় CORS হেডারস সম্পর্কে অনুমতি নেয়া যায়। এই Request-এ নিম্নলিখিত হেডারগুলো থাকে:
- Access-Control-Allow-Methods: কোন HTTP মেথডগুলো অনুমোদিত, যেমন GET, POST।
- Access-Control-Allow-Headers: কোন হেডারগুলো অনুমোদিত।
- Access-Control-Max-Age: কতক্ষণ পর্যন্ত প্রিফ্লাইট অনুরোধের ফলাফল ক্যাশে রাখা যাবে।