CORS to skrót od Cross-Origin Resource Sharing, czyli mechanizmu umożliwiającego bezpieczny dostęp do zasobów między różnymi źródłami. Oznacza to, że strona internetowa może załadować zasoby (np. skrypty, obrazy czy style CSS) z innej domeny, ale tylko wtedy, gdy ta domena wyrazi na to zgodę.
Dlaczego potrzebujemy mechanizmu CORS? Otóż, bez niego przeglądarki blokują ładowanie zasobów z innych domen, ponieważ uważają to za potencjalne zagrożenie bezpieczeństwa. Jednakże, w dzisiejszych czasach strony internetowe coraz częściej korzystają z zewnętrznych bibliotek, narzędzi czy innych usług, które wymagają pobrania zasobów z innych źródeł.
Jak działa CORS? W momencie, gdy przeglądarka próbuje załadować zasób z innej domeny, wysyła ona żądanie do serwera, na którym znajduje się dany zasób. W odpowiedzi serwer może zwrócić nagłówek Access-Control-Allow-Origin, który określa, czy dany adres IP ma zezwolenie na pobranie danego zasobu. Jeśli adres IP znajduje się na liście zaakceptowanych, to przeglądarka pobiera zasób i umożliwia jego wykorzystanie na stronie internetowej.
Jeśli chodzi o bezpieczeństwo, mechanizm CORS stosuje kilka zasad. Przede wszystkim, zasoby pobierane z innych domen nie mają dostępu do żadnych prywatnych informacji, takich jak ciasteczka czy dane logowania. Dodatkowo, serwer może zezwolić tylko na konkretne metody HTTP (np. GET, POST), co ogranicza ryzyko ataków.
Warto także wspomnieć, że istnieją dwa rodzaje żądań CORS – prosty i złożony. Żądanie prosty to żądanie, które spełnia określone kryteria (np. metoda HTTP to GET, a nie POST), co oznacza, że przeglądarka nie wysyła dodatkowych nagłówków. Żądanie złożone natomiast wymaga dodatkowych nagłówków, takich jak Content-Type czy Authorization, co oznacza, że przeglądarka musi wysłać żądanie preflight, czyli przedwstępne, by upewnić się, że serwer przyjmie to żądanie.
Podsumowując, mechanizm CORS to ważne narzędzie, które umożliwia bezpieczne pobieranie zasobów z innych źródeł. Dzięki niemu strony internetowe mogą korzystać z zewnętrznych bibliotek czy innych narzędzi, co przyczynia się do zwiększenia ich funkcjonalności.