Prečo sa v HTTP požiadavke odosiela metóda OPTIONS pred vykonaním požiadaviek GET/POST?
sobes.tech AI
Odpoveď od AI
Metóda OPTIONS sa používa na určenie dostupných metód a ďalších parametrizovaných možností pre webový zdroj alebo server, bez potreby špeciálneho zásahu alebo prístupu ku zdroju samotným dopytom. Je súčasťou mechanizmu CORS (Cross-Origin Resource Sharing).
Keď sa webová stránka pokúsi urobiť požiadavku na zdroj na inom doméne (cross-origin požiadavka), prehliadač môže odoslať predbežnú (preflight) požiadavku s metódou OPTIONS. Táto požiadavka obsahuje hlavičky ako Access-Control-Request-Method a Access-Control-Request-Headers, ktoré určujú, aká HTTP metóda a aké hlavičky budú použité v skutočnej požiadavke.
Server, ktorý dostane požiadavku OPTIONS, môže odpovedať hlavičkami Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers a Access-Control-Max-Age, aby oznámil prehliadaču, či je skutočná požiadavka povolená a aké metódy/hlavičky sú povolené.
Ak server povolí požiadavku, prehliadač prejde k vykonaniu skutočnej požiadavky (GET, POST atď.). Ak nie, požiadavka je zablokovaná prehliadačom, a skutočná požiadavka sa neodosiela, čím chráni server pred neoprávnenými cross-origin požiadavkami.
Požiadavka OPTIONS sa odosiela nie pred každou požiadavkou GET/POST, ale iba pred určitými typmi cross-origin požiadaviek, ktoré sú považované za "ne-príjemné" (non-simple). Jednoduché požiadavky (napríklad GET alebo POST s určitými typmi obsahu a bez používateľských hlavičiek) sa odosielajú bez predbežnej požiadavky OPTIONS.
# Príklad hlavičiek požiadavky OPTIONS
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com
# Príklad hlavičiek odpovede servera na 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 # Cache výsledok preflight na 24 hodín
Všeobecne ide o bezpečnostný mechanizmus na kontrolu prístupu ku zdrojom pri cross-origin požiadavkách, ktorý umožňuje serveru určiť pred odoslaním hlavnej požiadavky, či prehliadač vykoná povolené akcie.