Wprowadzenie
<strong>CORS (Cross-Origin Resource Sharing)</strong> to mechanizm bezpieczeństwa przeglądarek internetowych, który pozwala serwerom kontrolować, czy zasoby (API, czcionki, obrazy itp.) mogą być udostępniane stronom z innych domen.
Same-Origin Policy (SOP)
Przeglądarki domyślnie blokują żądania cross-origin ze względu na bezpieczeństwo (Same-Origin Policy). CORS jest sposobem na <strong>kontrolowane zdjęcie tego ograniczenia</strong> przez serwer.
Jak działa CORS?
- Przeglądarka wysyła żądanie <strong>preflight</strong> (metoda <code>OPTIONS</code>)
- Serwer odpowiada nagłówkami <code>Access-Control-*</code>
- Jeśli serwer zezwoli – przeglądarka wykonuje właściwe żądanie (GET, POST, PUT…)
Najważniejsze nagłówki CORS
- <code>Access-Control-Allow-Origin</code> – np. <code>https://example.com</code> lub <code>*</code>
- <code>Access-Control-Allow-Methods</code> – GET, POST, PUT, DELETE…
- <code>Access-Control-Allow-Headers</code> – Content-Type, Authorization itp.
- <code>Access-Control-Allow-Credentials</code> – <code>true</code> (do cookies i autoryzacji)
- <code>Access-Control-Max-Age</code> – jak długo cachować wynik preflight
Typowe błędy CORS
- <code>Access-Control-Allow-Origin</code> missing / not matching
- Żądanie z <code>credentials: 'include'</code> + <code>Access-Control-Allow-Origin: *</code>
- Brak odpowiedzi na preflight (OPTIONS)
Jak skonfigurować CORS?
<strong>Przykłady konfiguracji:</strong>
- Express.js / Node.js
- NestJS, Next.js API Routes, Vercel, AWS API Gateway, Nginx itp.
Best Practices (2026)
- Nigdy nie używaj <code>Access-Control-Allow-Origin: *</code> razem z <code>credentials: 'include'</code>
- Precyzyjnie określ dozwolone originy (najlepiej z listy)
- Używaj <code>Access-Control-Allow-Credentials: true</code> tylko gdy jest naprawdę potrzebne
- Konfiguruj CORS na poziomie reverse proxy (Nginx, Cloudflare) gdy to możliwe
Aktualny stan (2026)
CORS pozostaje podstawowym mechanizmem bezpieczeństwa przeglądarek. Coraz częściej stosuje się też <strong>Credentialless CORS</strong> oraz integrację z Content Security Policy (CSP) i Trusted Types.
Powiązane pojęcia
Dodano: 17 maja 2026