რატომ იგზავნება HTTP მოთხოვნაში OPTIONS მეთოდი 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
# მაგალითი სერვერის პასუხის თავფურცლები
# 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 # შედეგის 24 საათით შენახვა
საერთო ჯამში, ეს არის უსაფრთხოების მექანიზმი რესურსებზე წვდომის კონტროლისთვის კროს-ორგინ მოთხოვნებში, რომელიც სერვერს საშუალებას აძლევს განსაზღვროს, უნდა შესრულდეს თუ არა ნებართვული მოქმედებები რეალური მოთხოვნის გაგზავნამდე.