Tester CORS
Błędy CORS to „klasyczna“ czerwień w konsoli przeglądarki: wywołujesz API z innej domeny, a przeglądarka blokuje odpowiedź. Ten tester wysyła żądanie preflight OPTIONS do dowolnego adresu URL, który wkleisz, z wybranym przez Ciebie źródłem i metodą, a następnie dekoduje nagłówki Access-Control-*, dzięki czemu widzisz dokładnie, co serwer dopuszcza, co blokuje i dlaczego przeglądarka zgłasza błąd.
Jak przetestować CORS
-
1
Wpisz docelowy adres URL
Punkt końcowy API, który chcesz wywołać z frontendu. Uwzględnij ciąg zapytania i protokół.
-
2
Ustaw metodę i źródło (origin)
GET/POST/PUT/DELETE/PATCH. Źródłem może być adres Twojej witryny lub dowolne źródło, które chcesz zasymulować.
-
3
Zrozum preflight
Tester zawsze wysyła żądanie OPTIONS z wybranym źródłem i metodą oraz nagłówkiem Access-Control-Request-Headers: Content-Type, dokładnie taki preflight, jaki przeglądarka wysyła przed żądaniem JSON.
-
4
Uruchom test
Tester wysyła preflight, a następnie raportuje status HTTP oraz nagłówki odpowiedzi CORS: Allow-Origin, Allow-Methods, Allow-Headers, Allow-Credentials i Max-Age.
-
5
Napraw błędną konfigurację
Raport wskazuje, czego brakuje lub co jest błędne, brakujący Allow-Origin, niedozwolony nagłówek, niedozwolona metoda.
Nagłówki, które mają znaczenie
| Nagłówek | Do czego służy |
|---|---|
| Access-Control-Allow-Origin | Które źródła mogą odczytać odpowiedź |
| Access-Control-Allow-Methods | Preflight: które metody są dozwolone |
| Access-Control-Allow-Headers | Preflight: które nagłówki żądania są dozwolone |
| Access-Control-Allow-Credentials | Czy dozwolone są ciasteczka/uwierzytelnianie |
| Access-Control-Expose-Headers | Które nagłówki odpowiedzi może odczytać JS |
| Access-Control-Max-Age | Jak długo wynik preflight jest buforowany |
Żądania proste vs. żądania z preflight
Żądanie jest „proste“ (bez preflight) tylko wtedy, gdy spełnione są wszystkie poniższe warunki:
- Metoda to GET, HEAD lub POST.
- Nagłówki ograniczają się do Accept, Accept-Language, Content-Language, Content-Type (o określonych wartościach).
- Content-Type, jeśli występuje, to application/x-www-form-urlencoded, multipart/form-data lub text/plain.
Wszystko inne, treść JSON, nagłówek Authorization, własny nagłówek X-Foo, metoda PUT/DELETE/PATCH, wywołuje preflight OPTIONS. Serwer musi odpowiedzieć na preflight właściwymi nagłówkami Allow-*, w przeciwnym razie właściwe żądanie nigdy nie zostanie wysłane.
Typowe błędy CORS
- „No Access-Control-Allow-Origin header“ → serwer nie ustawia tego nagłówka. Napraw to po stronie serwera, nie klienta.
- *„Credentials mode requires Allow-Origin not to be “ → jeśli wysyłasz ciasteczka,
Allow-Originmusi być konkretnym źródłem (lub odbiciem nagłówka Origin). - „Request header X not allowed“ → dodaj X do
Access-Control-Allow-Headersw odpowiedzi na preflight. - „Method not allowed“ → dodaj tę metodę do
Access-Control-Allow-Methods. - „Redirect not allowed in preflight“ → preflight nie może podążać za przekierowaniami. Punkt końcowy OPTIONS musi odpowiedzieć bezpośrednio.
Allow-Origin: * vs. odbicie nagłówka Origin
Access-Control-Allow-Origin: * jest liberalny, ale nie da się go łączyć z poświadczeniami. W środowisku produkcyjnym odbijaj nagłówek Origin z żądania (po weryfikacji względem listy dozwolonych) i ustaw Allow-Credentials: true, jeśli potrzebujesz ciasteczek.
Proxy jako obejście
Jeśli nie masz kontroli nad serwerem, cienkie proxy w Twojej domenie całkowicie eliminuje CORS, przeglądarka widzi żądanie jako same-origin. Wiele platform hostingowych (Vercel, Netlify, Cloudflare) oferuje reguły przepisywania (rewrite) właśnie do tego celu.
Najczęściej zadawane pytania
Aby uniemożliwić złośliwej stronie odczytanie prywatnych danych w innej witrynie przy użyciu ciasteczek z Twojej przeglądarki. Bez CORS odwiedzenie evil.com mogłoby pozwolić tej stronie na wysłanie żądania do wewnętrznego API Twojego banku w Twoim imieniu. CORS wymusza, by bank jawnie zezwolił na odczyty cross-origin.
Tylko podczas tworzenia oprogramowania. Chromium ma flagę --disable-web-security, ale wpływa ona na wszystkie witryny i jest niebezpieczna. Właściwym rozwiązaniem są nagłówki po stronie serwera lub proxy.
Postman nie jest przeglądarką, całkowicie ignoruje CORS. CORS jest egzekwowany wyłącznie przez przeglądarki dla żądań JavaScript. Serwer, który działa w Postmanie, nie jest automatycznie poprawny pod kątem CORS.
Obrazy i klasyczne tagi <script> ładują się cross-origin bez CORS, ale JS nie może odczytać ich zawartości. <img crossorigin> i fetch() egzekwują CORS, właśnie dlatego obrazy rysowane na canvasie stają się „skażone“ (tainted) bez niego.
Powiązane narzędzia
Test prędkości
Wykonaj szybki, darmowy test prędkości internetu w przeglądarce. Zmierz prędkość pobierania w Mbps oraz opóźnienia i jitter, i sprawdź, czy Twoje łącze nadaje się do streamingu 4K, gier i rozmów wideo. Bez aplikacji i bez rejestracji.
Tester endpointów API
Testuj w przeglądarce endpoint HTTP lub HTTPS ze zgodą CORS. Sprawdź stan końcowy, udostępnione nagłówki, czas i ograniczony podgląd treści.
Analizator nagłówków e-mail
Analizuj surowe nagłówki e-mail prywatnie w przeglądarce. Sprawdź przeskoki Received, czasy oraz dane SPF, DKIM, DMARC i ARC bez wysyłania wiadomości.
Jaki jest mój adres IP
Zobacz adres IP odebrany przez ten serwer dla żądania, jego wersję IPv4 lub IPv6 oraz, gdy lokalne dane GeoIP są dostępne, przybliżony kraj.
Wyszukiwanie adresu IP
Sprawdź publiczny adres IPv4 lub IPv6, aby zobaczyć przybliżony kraj, region, miasto, współrzędne, ISP, ASN, organizację i strefę czasową.
Sprawdzacz protokołów HTTP/2 i HTTP/3
Analizuj lokalnie wklejone nagłówki odpowiedzi, aby rozpoznać zaobserwowaną wersję HTTP i reklamę HTTP/3 w Alt-Svc.