Sobes.tech
Junior

რა არის CORS?

sobes.tech AI

პასუხი AI-სგან

CORS (Cross-Origin Resource Sharing) — ეს არის მექანიზმი, რომელიც საშუალებას აძლევს ვებგვერდებს მოთხოვნათ რესურსები სხვა დომენიდან, პორტიდან ან პროტოკოლიდან, განსხვავებული იმ დომენიდან, საიდანაც თავად გვერდი იტვირთება. ეს კეთდება დამატებითი HTTP სათაურების საშუალებით.

ჩვეულებრივ, ბრაუზერები იყენებენ Same-Origin Policy (SOP) პოლიტიკას, რომელიც აკრძალავს ერთ გვერდზე მოქმედ სკრიპტებს წვდომას სხვა წყაროს მონაცემებზე (დომენი, პორტი, პროტოკოლი). CORS ამ პოლიტიკას მსუბუქად აქცევს კონტროლირებად გზით, სერვერს საშუალებას აძლევს მკაფიოდ დაუშვას cross-domain მოთხოვნები.

როგორ მუშაობს CORS:

  1. სადაც მარტივი მოთხოვნაა: თუ მოთხოვნა შეესაბამება გარკვეულ კრიტერიუმებს (მაგალითად, გამოიყენება GET ან POST მეთოდი, მხოლოდ გარკვეული სათაურებია დაშვებული), ბრაუზერი პირდაპირ აგზავნის მოთხოვნას დამატებით Origin სათაურით, რომელიც მიუთითებს მოთხოვნის წყაროს. სერვერი, ამ სათაურის მიღების შემდეგ, პასუხობს Access-Control-Allow-Origin სათაურით, რომელიც მიუთითებს დაშვებულ წყაროს.
  2. Preflight მოთხოვნა: არასაიმედო მოთხოვნებისთვის (მაგალითად, PUT, DELETE მეთოდების გამოყენება ან მომხმარებლის მიერ განსაზღვრული სათაურების გამოყენება), ბრაუზერი პირველ რიგში აგზავნის წინასწარ (preflight) OPTIONS მოთხოვნას. ეს მოთხოვნა სთხოვს სერვერს, დაშვებულია თუ არა მიზნობრივი მოთხოვნის გაგზავნა. სერვერი პასუხობს სათაურებით, რომლებიც მიუთითებს დაშვებულ მეთოდებს, სათაურებს და წყაროს. თუ preflight მოთხოვნა წარმატებით დასრულდა, ბრაუზერი აგზავნის რეალურ მოთხოვნას.

CORS-ის ძირითადი სათაურები:

  • Origin: გამოგზავნილია ბრაუზერიდან მოთხოვნის დროს, მიუთითებს წყაროს (დომენი, პორტი, პროტოკოლი), რომელმაც ინიცირა მოთხოვნა.
  • Access-Control-Allow-Origin: გამოგზავნილია სერვერიდან პასუხით, მიუთითებს წყაროს, რომელსაც აქვს ნებართვა პასუხის მიღებაზე. შეიძლება იყოს კონკრეტული დომენი, * (ნებისმიერი წყარო), ან სერვერის მიერ დინამიურად გენერირებული, Origin სათაურის საფუძველზე.
  • Access-Control-Allow-Methods: გამოგზავნილია სერვერიდან preflight პასუხით, მიუთითებს ნებადართულ HTTP მეთოდებს (GET, POST, PUT, DELETE და სხვა).
  • Access-Control-Allow-Headers: გამოგზავნილია სერვერიდან preflight პასუხით, მიუთითებს ნებადართულ მოთხოვნის სათაურებს.
  • Access-Control-Allow-Credentials: გამოგზავნილია სერვერიდან პასუხით, მიუთითებს, ნებადართულია თუ არა კუკიებისა და სხვა ავტორიზაციის მონაცემების მიღება მოთხოვნაში.

მაგალითი სერვერის პასუხის სათაურების, რომლებიც ნებართვას აძლევენ მოთხოვნებს https://example.com-დან:

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization

CORS აუცილებელია მრავალი ვებ-აპლიკაციის სწორად მუშაობისთვის, რომლებიც იყენებენ cross-origin AJAX მოთხოვნებს, როგორიცაა API ურთიერთქმედება, ფონტების ჩატვირთვა, ვებ-ფონტების გამოყენება CDN-დან და სხვა. სერვერზე CORS-ის სწორად კონფიგურაცია კრიტიკულია უსაფრთხოებისა და ფუნქციონალობისთვის.