Sobes.tech
Junior

Какво е CORS?

sobes.tech AI

Отговор от AI

CORS (Cross-Origin Resource Sharing) е механизъм, който позволява на уеб страниците да заявяват ресурси от друг домейн, порт или протокол, различен от този, от който е заредена самата страница. Това се осъществява чрез допълнителни HTTP заглавки.

По подразбиране браузърите прилагат политиката Same-Origin Policy (SOP), която забранява на скриптове, изпълняващи се на една страница, да имат достъп до данни от друг източник (домейн, порт, протокол). CORS омекотява тази политика по контролиран начин, предоставяйки на сървъра възможност ясно да разрешава крос-домейни заявки.

Как работи CORS:

  1. Проста заявка: Ако заявката отговаря на определени критерии (например използва метода GET или POST, разрешени са само определени заглавки), браузърът изпраща заявката директно с допълнителен заглавен Origin, който указва източника на заявката. Сървърът, при получаване на този заглавен, може да отговори с Access-Control-Allow-Origin, указващ разрешения източник.
  2. Preflight-заявка: За "непрости" заявки (например с използване на методи PUT, DELETE, или с потребителски заглавки), браузърът първо изпраща предварителен (preflight) OPTIONS-заявка. Тази заявка пита сървъра дали е разрешено да се изпрати целевата заявка. Сървърът отговаря с заглавки, указващи разрешените методи, заглавки и източници. Ако preflight-заявката е успешна, браузърът изпраща самата заявка.

Основни заглавки на CORS:

  • Origin: Изпраща се от браузъра в заявката, указва източника (домейн, порт, протокол) на страницата, инициирала заявката.
  • Access-Control-Allow-Origin: Изпраща се от сървъра в отговора, указва източника, на който е разрешено да получава отговора. Може да бъде конкретен домейн, * (всеки източник), или динамично генериран от сървъра на базата на заглавката Origin.
  • Access-Control-Allow-Methods: Изпраща се от сървъра в отговора на preflight-заявката, указва разрешените HTTP методи (GET, POST, PUT, DELETE и др.).
  • Access-Control-Allow-Headers: Изпраща се от сървъра в отговора на preflight-заявката, указва разрешените заглавки на заявката.
  • Access-Control-Allow-Credentials: Изпраща се от сървъра в отговора, указва дали е разрешено да се приемат бисквитки и други идентификационни данни в заявката.

Пример за заглавки на отговор на сървър, разрешаващи заявки от https://example.com:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization

CORS е необходим за правилната работа на много уеб приложения, използващи междоменни AJAX заявки, като API взаимодействия, зареждане на шрифтове, използване на уеб шрифтове с CDN и др. Правилната настройка на CORS на сървъра е критична за сигурността и функционалността на приложението.