Dlaczego metoda OPTIONS jest wysyłana w żądaniu HTTP przed wykonaniem żądań GET/POST?
sobes.tech AI
Odpowiedź od AI
Metoda OPTIONS służy do określenia dostępnych metod i innych opcji parametryzowanych dla zasobu internetowego lub serwera, bez konieczności podejmowania jakichkolwiek specjalnych działań lub dostępu do samego zasobu przez żądanie. Jest to część mechanizmu CORS (Cross-Origin Resource Sharing).
Gdy strona internetowa próbuje wykonać żądanie do zasobu na innym domenie (żądanie między źródłami), przeglądarka może wysłać wstępne (preflight) żądanie z metodą OPTIONS. To żądanie zawiera nagłówki takie jak Access-Control-Request-Method i Access-Control-Request-Headers, które wskazują, jaka metoda HTTP i jakie nagłówki będą używane w rzeczywistym żądaniu.
Serwer, który otrzyma żądanie OPTIONS, może odpowiedzieć nagłówkami takimi jak Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers i Access-Control-Max-Age, aby poinformować przeglądarkę, czy rzeczywiste żądanie jest dozwolone i jakie metody/nagłówki są akceptowalne.
Jeśli serwer zezwala na żądanie, przeglądarka przechodzi do wykonania rzeczywistego żądania (GET, POST itp.). Jeśli nie, żądanie jest blokowane przez przeglądarkę, chroniąc serwer przed nieautoryzowanymi żądaniami między źródłami.
Żądanie OPTIONS nie jest wysyłane przed każdym żądaniem GET/POST, lecz tylko przed określonymi typami żądań między źródłami, które są uważane za "nie-proste" (non-simple). Proste żądania (np. GET lub POST z określonymi typami treści i bez niestandardowych nagłówków) są wysyłane bez wcześniejszego żądania OPTIONS.
# Przykład nagłówków żądania OPTIONS
# Access-Control-Request-Method: POST
# Access-Control-Request-Headers: Content-Type, Authorization
# Origin: http://client-domain.com
# Przykład nagłówków odpowiedzi serwera 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 wynik preflight na 24 godziny
Ogólnie jest to mechanizm bezpieczeństwa do kontroli dostępu do zasobów przy żądaniach między źródłami, pozwalający serwerowi określić przed wysłaniem głównego żądania, czy przeglądarka wykona dozwolone działania.