Sobes.tech
Middle

Kāpēc HTTP pieprasījumā pirms GET/POST pieprasījumiem tiek nosūtīta OPTIONS metode?

sobes.tech AI

Atbilde no AI

Metode OPTIONS tiek izmantots, lai noteiktu pieejamās metodes un citas parametrizētas opcijas tīmekļa resursam vai serverim, nepārsniedzot īpašas darbības vai piekļuvi resursam pašam pieprasījumam. Tas ir CORS (Cross-Origin Resource Sharing) mehānisma daļa.

Kad tīmekļa lapa mēģina veikt pieprasījumu uz citu domēnu (krustdomeņu pieprasījums), pārlūkprogramma var nosūtīt priekšpārbaudes (preflight) pieprasījumu ar metodi OPTIONS. Šis pieprasījums satur galvenes, piemēram, Access-Control-Request-Method un Access-Control-Request-Headers, kas norāda, kura HTTP metode un kuras galvenes tiks izmantotas faktiskajā pieprasījumā.

Serveris, kas saņem OPTIONS pieprasījumu, var atbildēt ar galvenēm Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers un Access-Control-Max-Age, lai paziņotu pārlūkprogrammai, vai faktiskais pieprasījums ir atļauts un kādas metodes/galvenes ir pieļaujamas.

Ja serveris atļauj pieprasījumu, pārlūkprogramma pāriet pie faktiskā pieprasījuma (GET, POST utt.). Ja nē, pieprasījums tiek bloķēts ar pārlūkprogrammu, un faktiskais pieprasījums netiek nosūtīts, tādējādi aizsargājot serveri no neatļautiem krustdomeņu pieprasījumiem.

OPTIONS pieprasījums netiek nosūtīts pirms katras GET/POST pieprasījuma, bet tikai pirms noteiktiem krustdomeņu pieprasījumiem, kas tiek uzskatīti par "ne-papildu" (non-simple). Vienkārši pieprasījumi (piemēram, GET vai POST ar noteiktiem satura tipiem un bez lietotāja galvenēm) tiek nosūtīti bez iepriekšējas OPTIONS pieprasījuma.

# Piemērs OPTIONS pieprasījuma galvenēm
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com

# Piemērs servera atbildes galvenēm
# 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 # Rezultāta kešatmiņa uz 24 stundām

Kopumā tas ir drošības mehānisms, kas kontrolē piekļuvi resursiem krustdomeņu pieprasījumos, ļaujot serverim noteikt, vai pārlūks veiks atļautas darbības pirms galvenā pieprasījuma nosūtīšanas.