Sobes.tech
Junior

Czym jest CORS?

sobes.tech AI

Odpowiedź od AI

CORS (Cross-Origin Resource Sharing) — to mechanizm umożliwiający stronom internetowym żądanie zasobów z innej domeny, portu lub protokołu, różniącego się od tego, z którego załadowano samą stronę. Odbywa się to za pomocą dodatkowych nagłówków HTTP.

Domyślnie przeglądarki stosują politykę Same-Origin Policy (SOP), która zabrania skryptom działającym na jednej stronie dostępu do danych z innego źródła (domena, port, protokół). CORS łagodzi tę politykę w kontrolowany sposób, umożliwiając serwerowi wyraźne zezwolenie na żądania międzydomenowe.

Jak działa CORS:

  1. Proste żądanie: Jeśli żądanie spełnia określone kryteria (np. używa metody GET lub POST, dozwolone są tylko niektóre nagłówki), przeglądarka wysyła żądanie bezpośrednio z dodatkiem nagłówka Origin, wskazując źródło żądania. Serwer, otrzymując ten nagłówek, może odpowiedzieć nagłówkiem Access-Control-Allow-Origin, wskazującym dozwolone źródło.
  2. Preflight: Dla "nieprostych" żądań (np. z metodami PUT, DELETE lub z niestandardowymi nagłówkami), przeglądarka najpierw wysyła wstępne (preflight) żądanie OPTIONS. To żądanie pyta serwer, czy można wysłać główne żądanie. Serwer odpowiada nagłówkami wskazującymi dozwolone metody, nagłówki i źródła. Jeśli preflight zakończy się sukcesem, przeglądarka wysyła właściwe żądanie.

Główne nagłówki CORS:

  • Origin: Wysyłany przez przeglądarkę w żądaniu, wskazuje źródło (domena, port, protokół) strony inicjującej żądanie.
  • Access-Control-Allow-Origin: Wysyłany przez serwer w odpowiedzi, wskazuje źródło, które może otrzymać odpowiedź. Może to być konkretna domena, * (dowolne źródło) lub dynamicznie generowane na podstawie nagłówka Origin.
  • Access-Control-Allow-Methods: Wysyłany przez serwer w odpowiedzi na preflight, wskazuje dozwolone metody HTTP (GET, POST, PUT, DELETE itp.).
  • Access-Control-Allow-Headers: Wysyłany przez serwer w odpowiedzi na preflight, wskazuje dozwolone nagłówki żądania.
  • Access-Control-Allow-Credentials: Wysyłany przez serwer w odpowiedzi, wskazuje, czy można akceptować pliki cookie i inne dane uwierzytelniające w żądaniu.

Przykład nagłówków odpowiedzi serwera, zezwalających na żądania z 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 jest niezbędny do poprawnego działania wielu aplikacji internetowych korzystających z żądań AJAX między domenami, takich jak interakcje API, ładowanie fontów, korzystanie z Web Fonts z CDN itp. Prawidłowa konfiguracja CORS na serwerze jest kluczowa dla bezpieczeństwa i funkcjonalności aplikacji.