Cross-Origin Resource Sharing (CORS) একটি মেকানিজম যা অতিরিক্ত HTTP হেডার ব্যবহার করে ব্রাউজারকে বলে যে, একটি অরিজিনে (ডোমেন, প্রোটোকল, বা পোর্ট) রান হচ্ছে এমন একটি ওয়েব অ্যাপ্লিকেশনকে, একটি ভিন্ন অরিজিন থেকে সিলেক্টেড রিসোর্স অ্যাক্সেস করার অনুমতি দিন। একটি ওয়েব অ্যাপ্লিকেশন ক্রস-অরিজিন HTTP রিকোয়েস্ট এক্সিকিউট করে যখন সেটি একটি রিসোর্স রিকোয়েস্ট করে যার অরিজিন (ডোমেন, প্রোটোকল, বা পোর্ট) তার নিজস্ব থেকে ভিন্ন।
উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন বিবেচনা করুন যার ফ্রন্টএন্ড (UI) এবং ব্যাকএন্ড (সার্ভিস) আছে। ধরুন ফ্রন্টএন্ড সার্ভ হচ্ছে https://demodomain-ui.com- থেকে এবং ব্যাকএন্ড সার্ভ হচ্ছে https://demodomain-service.com/api- থেকে। যদি একজন এন্ড ইউজার অ্যাপ্লিকেশন অ্যাক্সেস করতে চায়, নিরাপত্তার কারণেই ব্রাউজাররা UI-তে থেকে শুরু হওয়া ক্রস-অরিজিন HTTP রিকোয়েস্টগুলোর রieken করেন।
এই সমস্যা সমাধানের জন্য CORS স্ট্যান্ডার্ড দরকার কারণ এটি সার্ভারগুলোক নন শুধু কে এর অ্যাসেটস অ্যাক্সেস করতে পারবে সেটি নির্দিষ্ট করতে দেয়, বরং অ্যাসেটসগুলো কীভাবে অ্যাক্সেস করা যাবে সেটিও নির্দিষ্ট করতে দেয়। ক্রস-অরিজিন রিকোয়েস্টগুলো স্ট্যান্ডার্ড HTTP রিকোয়েস্ট মেথড ব্যবহার করে করা হয়। অধিকাংশ সার্ভার GET রিকোয়েস্ট অনুমতি দেয়, অর্থাৎ তারা এক্সটার্নাল অরিজিন (যেমন একটি ওয়েব পেজ) থেকে তাদের অ্যাসেটস পড়ার অনুমতি দেয়। PATCH, PUT, বা DELETE-এর মতো HTTP রিকোয়েস্ট মেথডগুলো। CORS স্ট্যান্ডার্ড দ্বারা যোগ করা HTTP হেডারগুলো নিচে দেওয়া হলো:
- Access-Control-Allow-Origin
- Access-Control-Allow-Credentials
- Access-Control-Allow-Headers
- Access-Control-Allow-Methods
- Access-Control-Expose-Headers
- Access-Control-Max-Age
- Access-Control-Request-Headers
- Access-Control-Request-Method
- Origin
গ্লোবাল লেভেলে CORS সক্ষম করা
প্রথমে NuGet Package Manager থেকে Microsoft.AspNet.WebApi.Cors ইনস্টল করুন।
এরপর `App_Start/WebApiConfig.cs` ফাইলটি খুলুন। `WebApiConfig.Register` মেথডে নিচের কোডটি যোগ করুন:

কন্ট্রোলার এবং একশন লেভেলে CORS সক্ষম করা
আমরা কন্ট্রোলার বা একশন মেথড লেভেলেও CORS সক্ষম করতে পারি নিচের মত করে:
উদাহরণ
using System.Web.Http;
using System.Web.Http.Cors;
namespace DemoWebApplication.Controllers
{
[EnableCors("*", "*", "*")] // Controller level
public class DemoController : ApiController
{
[EnableCors("*", "*", "*")] // Action level
public IHttpActionResult Get(int id)
{
return Ok();
}
}
}
একইভাবে, `[DisableCors]` অ্যাট্রিবিউট ব্যবহার করে CORS ডিজেবলও করা যায়।