CORS (Cross-Origin Resource Sharing)

Wprowadzenie

CORS (Cross-Origin Resource Sharing) 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 kontrolowane zdjęcie tego ograniczenia przez serwer.

Jak działa CORS?

  • Przeglądarka wysyła żądanie preflight (metoda OPTIONS)
  • Serwer odpowiada nagłówkami Access-Control-*
  • Jeśli serwer zezwoli – przeglądarka wykonuje właściwe żądanie (GET, POST, PUT…)

Najważniejsze nagłówki CORS

  • Access-Control-Allow-Origin – np. https://example.com lub *
  • Access-Control-Allow-Methods – GET, POST, PUT, DELETE…
  • Access-Control-Allow-Headers – Content-Type, Authorization itp.
  • Access-Control-Allow-Credentialstrue (do cookies i autoryzacji)
  • Access-Control-Max-Age – jak długo cachować wynik preflight

Typowe błędy CORS

  • Access-Control-Allow-Origin missing / not matching
  • Żądanie z credentials: 'include' + Access-Control-Allow-Origin: *
  • Brak odpowiedzi na preflight (OPTIONS)

Jak skonfigurować CORS?

Przykłady konfiguracji:

  • Express.js / Node.js
  • NestJS, Next.js API Routes, Vercel, AWS API Gateway, Nginx itp.

Best Practices (2026)

  • Nigdy nie używaj Access-Control-Allow-Origin: * razem z credentials: 'include'
  • Precyzyjnie określ dozwolone originy (najlepiej z listy)
  • Używaj Access-Control-Allow-Credentials: true 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ż Credentialless CORS oraz integrację z Content Security Policy (CSP) i Trusted Types.

Powiązane pojęcia

Same-Origin Policy • Access-Control-Allow-Origin • Preflight Request • JSONP • WebSocket • Content Security Policy (CSP) • Fetch API

Dodano: 17 maja 2026