CORS — Cross-Origin Resource Sharing, ya’ni browserda bir origin’dan boshqa origin’dagi resurslarga so‘rov yuborish va javobni o‘qish qoidalarini boshqaruvchi mexanizm. CORS web browser xavfsizlik modeli bilan bog‘liq.
CORS server tomonidan HTTP headerlar orqali boshqariladi. U qaysi domainlar server resurslaridan foydalanishi mumkinligini belgilaydi.
Origin
Origin uch qismdan iborat:
Masalan:
https://uzbekdevs.uz;https://api.uzbekdevs.uz;http://localhost:3000.
Agar protocol, domain yoki port farq qilsa, bu boshqa origin hisoblanadi.
Vazifasi
CORS quyidagi vazifalarni bajaradi:
- browserdagi cross-origin so‘rovlarni nazorat qilish;
- API’ga qaysi frontendlar ulan olishini belgilash;
- begona saytlar response o‘qishini cheklash;
- browser xavfsizlik modelini qo‘llab-quvvatlash;
- frontend va backend alohida domainlarda ishlaganda ruxsat berish;
- cookie bilan ishlaydigan cross-origin requestlarni boshqarish.
Masalan, frontend https://app.uzbekdevs.uz da, API esa https://api.uzbekdevs.uz da bo‘lsa, API CORS orqali frontendga ruxsat berishi kerak bo‘lishi mumkin.
Same-Origin Policy
Same-Origin Policy — browser xavfsizlik qoidasi. U bir origin’dagi sahifaga boshqa origin’dagi ma’lumotlarni erkin o‘qishga ruxsat bermaydi.
Bu qoida:
- foydalanuvchi ma’lumotlarini himoyalaydi;
- begona saytlar maxfiy response o‘qishini cheklaydi;
- browser security modelining asosiy qismi hisoblanadi;
- CORS orqali nazoratli tarzda kengaytiriladi.
CORS Same-Origin Policy’ni bekor qilmaydi, balki server ruxsati bilan cross-origin o‘qishni imkonli qiladi.
CORS qanday ishlaydi?
Browser cross-origin request yuborganda server javobidagi CORS headerlarni tekshiradi.
Oddiy jarayon:
- frontend boshqa origin’dagi API’ga request yuboradi;
- browser requestga
Originheaderini qo‘shadi; - server
Access-Control-Allow-Originheaderi bilan javob beradi; - browser origin ruxsat etilganini tekshiradi;
- ruxsat bo‘lsa, JavaScript response’ni o‘qiy oladi;
- ruxsat bo‘lmasa, browser response’ni bloklaydi.
Muhim jihat: request serverga borishi mumkin, lekin browser JavaScriptga response’ni o‘qishga ruxsat bermasligi mumkin.
Access-Control-Allow-Origin
Access-Control-Allow-Origin — server qaysi origin’ga response o‘qishga ruxsat berishini bildiruvchi header.
Misollar:
Access-Control-Allow-Origin: https://uzbekdevs.uzAccess-Control-Allow-Origin: *
* barcha originlarga ruxsat beradi, lekin credential bilan ishlaganda odatda ishlatilmaydi.
Preflight request
Preflight request — browser asosiy requestdan oldin yuboradigan OPTIONS so‘rovi. Bu server requestga ruxsat beradimi yoki yo‘qligini tekshiradi.
Preflight quyidagi holatlarda bo‘lishi mumkin:
- custom header ishlatilsa;
PUT,PATCH,DELETEmetodlari ishlatilsa;Content-Typeoddiy turlardan boshqa bo‘lsa;- credential bilan cross-origin request bo‘lsa.
Server preflight requestga mos CORS headerlar bilan javob qaytarishi kerak.
Access-Control-Allow-Methods
Bu header cross-origin requestlarda qaysi HTTP metodlarga ruxsat borligini bildiradi.
Misol:
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Bu frontendga shu metodlar bilan request yuborishga ruxsat berilganini bildiradi.
Access-Control-Allow-Headers
Bu header browserga qaysi custom headerlar yuborilishi mumkinligini bildiradi.
Misol:
Access-Control-Allow-Headers: Content-Type, Authorization
Agar frontend Authorization header yubormoqchi bo‘lsa, server bu headerga ruxsat berishi kerak.
Credentials
CORS’da credentials cookie, authorization header yoki TLS client certificate kabi authentication ma’lumotlarini bildiradi.
Credential bilan ishlashda:
- frontend
credentials: "include"ishlatishi mumkin; - server
Access-Control-Allow-Credentials: trueqaytaradi; Access-Control-Allow-Originaniq origin bo‘lishi kerak;*bilan credential ishlamaydi.
Cookie-based authentication ishlatilganda bu sozlamalar muhim.
CORS va CSRF farqi
CORS va CSRF boshqa-boshqa tushunchalar.
- CORS response’ni browser JavaScript o‘qishini nazorat qiladi;
- CSRF foydalanuvchi nomidan ruxsatsiz request yuborishga qaratiladi;
- CORS noto‘g‘ri sozlansa, ma’lumot oqishi mumkin;
- CSRF cookie avtomatik yuborilishidan foydalanadi;
- CORS CSRF himoyasining to‘liq o‘rnini bosmaydi.
Cookie ishlatiladigan tizimlarda CORS to‘g‘ri bo‘lsa ham, CSRF himoyasi kerak bo‘lishi mumkin.
CORS va API
CORS asosan browserdan API’ga yuboriladigan so‘rovlarda ko‘rinadi. Server-to-server requestlarda browser bo‘lmagani uchun CORS odatda qo‘llanmaydi.
API’da CORS quyidagilar uchun kerak:
- frontend va backend alohida domainlarda bo‘lsa;
- SPA API bilan ishlasa;
- local developmentda frontend
localhost:3000, backendlocalhost:8000bo‘lsa; - credential bilan cross-origin login ishlatilsa.
Dasturlashdagi o‘rni
CORS frontend va backend alohida originlarda ishlaganda muhim bo‘lgan browser xavfsizlik mexanizmidir. U API’dan response o‘qish ruxsatini server headerlari orqali boshqaradi.
Bog‘liq tushunchalar
HTTP, API, Browser, Origin, Same-Origin Policy, CSRF, Cookie, Header, Preflight request, Security