Sobes.tech
Middle

Защо се изпраща методът OPTIONS в HTTP заявка преди изпълнението на заявки GET/POST?

sobes.tech AI

Отговор от AI

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

Когато уеб страница се опитва да направи заявка към ресурс на друг домейн (крос-оригин заявка), браузърът може да изпрати предварителна (preflight) заявка с метода OPTIONS. Тази заявка съдържа заглавки като Access-Control-Request-Method и Access-Control-Request-Headers, които указват кой HTTP метод и кои заглавки ще се използват в реалната заявка.

Сървърът, който получи заявката OPTIONS, може да отговори с заглавки като Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers и Access-Control-Max-Age, за да уведоми браузъра дали реалната заявка е разрешена и кои методи/заглавки са допустими.

Ако сървърът разреши заявката, браузърът продължава с изпълнението на реалната заявка (GET, POST и т.н.). Ако не, заявката се блокира от браузъра, като по този начин защитава сървъра от неоторизирани крос-оригин заявки.

Заявката OPTIONS не се изпраща преди всяка GET/POST заявка, а само преди определени типове крос-оригин заявки, които се считат за "не-прости" (non-simple). Простите заявки (например, GET или POST с определени типове съдържание и без потребителски заглавки) се изпращат без предварителна заявка OPTIONS.

# Пример за заглавки на заявка OPTIONS
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com

# Пример за отговор на сървъра на OPTIONS
# Access-Control-Allow-Origin: http://client-domain.com
# Access-Control-Allow-Methods: POST, GET, OPTIONS
# Access-Control-Allow-Headers: Content-Type, Authorization
# Access-Control-Max-Age: 86400 # Кеширане на резултата preflight за 24 часа

Общо взето, това е механизъм за сигурност за контрол на достъпа до ресурси при крос-оригин заявки, който позволява на сървъра да определи преди изпращането на основната заявка дали браузърът ще изпълни разрешените действия.