Robocikowo>ROBOCIKOWO
Infrastruktura

CORS

2014AktywnyOpublikowano: 28 września 2026Aktualizacja: 28 września 2026Opublikowany
Mechanizm HTTP oparty na nagłówkach, którym serwer wskazuje przeglądarce, które originy poza jego własnym mogą ładować jego zasoby — kontrolowane rozluźnienie Same-Origin Policy.
Kluczowa innowacja
Umożliwił serwerom bezpieczne, kontrolowane rozluźnienie polityki Same-Origin Policy przez zestaw nagłówków HTTP wskazujących, które obce originy mogą odczytywać ich zasoby.
Kategoria
Infrastruktura
Poziom abstrakcji
Wzorzec
Poziom operacji
AplikacjaUdostępnianieWdrożenie
Zastosowania
Frontend wywołujący zewnętrzne API pod innym originemPubliczne API udostępniane aplikacjom przeglądarkowymAplikacje i agenci AI wykonujący żądania między-originowe do API modeliŁadowanie czcionek, obrazów lub danych z CDN pod innym originemKonfiguracja bram API i serwerów WWW pod kątem dostępu z przeglądarki

Jak działa

Przeglądarka do każdego żądania między-originowego dołącza nagłówek Origin. Dla żądań prostych (simple requests) — metoda GET, HEAD lub POST, tylko nagłówki z tzw. safelisty, a dla POST Content-Type ograniczony do application/x-www-form-urlencoded, multipart/form-data lub text/plain — przeglądarka wysyła żądanie od razu, a następnie sprawdza, czy odpowiedź zawiera pasujący nagłówek Access-Control-Allow-Origin; jeśli nie, blokuje odczyt odpowiedzi przez skrypt. Dla żądań nie spełniających warunków prostych (własne nagłówki, inne metody, inny Content-Type, tryb credentials: include) przeglądarka wykonuje najpierw preflight: automatyczne żądanie OPTIONS z nagłówkami Access-Control-Request-Method i Access-Control-Request-Headers. Serwer odpowiada (zwykle 204) nagłówkami Access-Control-Allow-Origin, Access-Control-Allow-Methods, Access-Control-Allow-Headers oraz opcjonalnie Access-Control-Max-Age (czas cache preflightu). Dopiero po akceptacji wysyłane jest właściwe żądanie. Przy żądaniach z poświadczeniami (ciasteczka, HTTP auth) serwer musi zwrócić Access-Control-Allow-Credentials: true, a symbol wieloznaczny „*" jest wtedy zabroniony dla Access-Control-Allow-Origin (i pokrewnych) — trzeba podać konkretny origin, inaczej przeglądarka zablokuje odpowiedź. Nagłówek Access-Control-Expose-Headers wskazuje, które nagłówki odpowiedzi spoza safelisty skrypt może odczytać.

Rozwiązany problem

Same-Origin Policy blokuje odczyt odpowiedzi na żądania między-originowe wykonywane ze skryptu, co uniemożliwiałoby legalnym aplikacjom (np. frontend pod jednym originem korzystający z API pod innym) komunikację między-domenową. CORS rozwiązuje ten problem, dając serwerowi możliwość jawnego i selektywnego zezwolenia wybranym originom na dostęp — bez całkowitego wyłączania ochrony przeglądarki.

Komponenty

Origin (nagłówek żądania)Identyfikuje origin inicjujący żądanie

Nagłówek automatycznie dołączany przez przeglądarkę do żądań między-originowych; wskazuje schemat, host i port strony źródłowej.

Żądanie preflight (OPTIONS)Wstępna negocjacja uprawnień przed właściwym żądaniem

Automatyczne żądanie OPTIONS wysyłane dla żądań nie-prostych, zawierające Access-Control-Request-Method i Access-Control-Request-Headers; serwer potwierdza, czy właściwe żądanie jest dozwolone.

Access-Control-Allow-OriginDeklaruje dozwolony origin odpowiedzi

Nagłówek odpowiedzi wskazujący, który origin może odczytać zasób: konkretny origin albo „*"; „*" jest zabroniony przy żądaniach z poświadczeniami.

Access-Control-Allow-MethodsLista dozwolonych metod HTTP

Nagłówek odpowiedzi preflightu wskazujący metody HTTP dozwolone dla zasobu (np. GET, POST, OPTIONS).

Access-Control-Allow-HeadersLista dozwolonych nagłówków żądania

Nagłówek odpowiedzi preflightu wskazujący, które nagłówki (np. własne, Content-Type) mogą pojawić się we właściwym żądaniu.

Access-Control-Allow-CredentialsZezwala na przesyłanie poświadczeń

Nagłówek odpowiedzi; wartość true pozwala dołączyć ciasteczka i dane uwierzytelniające. Wymusza jawny origin zamiast „*".

Access-Control-Max-AgeCzas cache odpowiedzi preflightu

Nagłówek odpowiedzi określający w sekundach, jak długo przeglądarka może cache’ować wynik preflightu, ograniczając liczbę żądań OPTIONS.

Access-Control-Expose-HeadersUdostępnia nagłówki odpowiedzi skryptowi

Nagłówek odpowiedzi wskazujący, które nagłówki spoza safelisty JavaScript może odczytać z odpowiedzi.

Implementacja

Pułapki implementacyjne
Symbol „*" z poświadczeniamiKrytyczna

Gdy żądanie zawiera poświadczenia (credentials: include), a odpowiedź ma Access-Control-Allow-Origin: *, przeglądarka blokuje odpowiedź.

Rozwiązanie:Zwracaj konkretny origin (najlepiej po walidacji względem allowlisty) oraz Access-Control-Allow-Credentials: true.
Brak obsługi preflight OPTIONSWysoka

Serwer nie odpowiada poprawnie na automatyczne żądanie OPTIONS, przez co właściwe żądanie nie-proste jest blokowane.

Rozwiązanie:Skonfiguruj serwer/bramę API tak, aby odpowiadały na OPTIONS nagłówkami Allow-Methods/Allow-Headers i statusem 2xx.
Niebezpieczne odbicie nagłówka OriginKrytyczna

Dynamiczne odbijanie dowolnego Origin do Access-Control-Allow-Origin razem z Allow-Credentials: true otwiera dostęp każdemu originowi do zasobów z ciasteczkami użytkownika.

Rozwiązanie:Waliduj Origin względem ścisłej allowlisty przed jego zwróceniem; nie odbijaj wartości bez sprawdzenia.
Nieudostępnione nagłówki odpowiedziŚrednia

Skrypt nie może odczytać nagłówków odpowiedzi spoza safelisty, jeśli nie wymieniono ich w Access-Control-Expose-Headers.

Rozwiązanie:Wymień potrzebne nagłówki w Access-Control-Expose-Headers.
Źle dobrany Access-Control-Max-AgeNiska

Zbyt krótki czas cache preflightu generuje nadmiar żądań OPTIONS; przeglądarki narzucają też własne górne limity.

Rozwiązanie:Dobierz Max-Age świadomie, uwzględniając limity przeglądarek.

Ewolucja

Oryginalny paper · 2014 · W3C Recommendation
Cross-Origin Resource Sharing (W3C Recommendation)
2014
Rekomendacja W3C „Cross-Origin Resource Sharing"
Punkt przełomowy

W3C publikuje CORS jako oficjalną rekomendację (16 stycznia 2014), standaryzując nagłówki kontroli dostępu między-originowego i mechanizm preflight.

2014
Włączenie do WHATWG Fetch Standard

Protokół CORS zostaje włączony do żywej specyfikacji WHATWG Fetch Standard, która obecnie zastępuje dokument W3C — adres w3.org/TR/cors przekierowuje do fetch.spec.whatwg.org.

Hiperparametry (konfigurowalne osie)

Dozwolone originyKrytyczna

Które originy mogą odczytać zasób (konkretna lista lub „*"). Przy poświadczeniach „*" jest niedozwolone.

Dozwolone metodyWysoka

Metody HTTP dozwolone dla zasobu w żądaniach między-originowych.

Dozwolone nagłówkiWysoka

Nagłówki żądania (w tym własne) dopuszczone we właściwym żądaniu.

PoświadczeniaWysoka

Czy dozwolone jest przesyłanie ciasteczek i danych uwierzytelniających.

Czas cache preflightuŚrednia

Jak długo przeglądarka cache’uje wynik preflightu.

Udostępnione nagłówkiŚrednia

Które nagłówki odpowiedzi spoza safelisty są odczytywalne przez skrypt.