Generator .htaccess CORS
Udostępnij API aplikacjom z innych domen
-
1Wprowadź dane
Wpisz treść, wklej tekst lub załaduj plik z dysku. -
2Kliknij przycisk
Narzędzie natychmiast przetworzy Twoje dane w przeglądarce. -
3Pobierz wynik
Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
return "Wynik gotowy w 0.1s";
}
Oceń to narzędzie:
Powiązane narzędzia
Inne narzędzia, które mogą Ci się przydaćGenerator nagłówków CORS
CORS (Cross-Origin Resource Sharing) kontroluje, które domeny mogą korzystać z Twojego API w przeglądarce. Bez odpowiednich nagłówków zapytania z innego origin są blokowane.
Kluczowe nagłówki
| Nagłówek | Znaczenie |
|---|---|
| Access-Control-Allow-Origin | dozwolone domeny |
| Access-Control-Allow-Methods | dozwolone metody HTTP |
| Access-Control-Allow-Headers | dozwolone nagłówki żądania |
| Access-Control-Allow-Credentials | cookies i dane uwierzytelniające |
| Access-Control-Max-Age | czas cache odpowiedzi preflight |
Ważna zasada bezpieczeństwa
Jeśli włączysz Access-Control-Allow-Credentials: true, nie możesz użyć origin *. Przeglądarka odrzuci taką odpowiedź. Podaj konkretną domenę, aby uniknąć wycieku danych.
Preflight OPTIONS
Dla żądań z niestandardowymi nagłówkami przeglądarka najpierw wysyła zapytanie OPTIONS. Reguła rewritingu zwraca na nie pustą odpowiedź 200, zanim wykona się właściwe żądanie.
Jak działa mechanizm CORS i co generuje to narzędzie
Cała komunikacja cross-origin opiera się na nagłówku Origin, który przeglądarka dokleja do żądania automatycznie. Nie da się go ustawić z poziomu kodu JavaScript, a żądanie wysłane w obrębie tego samego origin w ogóle go nie zawiera. Serwer odsyła w odpowiedzi nagłówek Access-Control-Allow-Origin. Jeżeli jego wartość nie pokrywa się z originem strony, przeglądarka blokuje odczyt odpowiedzi, choć żądanie dotarło do serwera i zostało wykonane.
Generator przekłada wybrane opcje na dyrektywy modułu mod_headers Apache. Blok IfModule sprawia, że plik .htaccess nie wywoła błędu 500 na hostingu, gdzie mod_headers jest wyłączony — reguły zostaną wtedy po prostu pominięte. Obsługa wielu domen opiera się na warunku: wyrażenie SetEnvIf sprawdza nagłówek Origin i ustawia zmienną środowiskową, a dyrektywa Header set z parametrem env= wysyła nagłówek tylko wtedy, gdy ta zmienna istnieje. Bez takiego warunku jeden statyczny nagłówek obsłuży wyłącznie jedno źródło.
Osobno traktowany jest preflight. Zanim przeglądarka wyśle żądanie metodą PUT lub DELETE albo z nagłówkiem Authorization, wysyła zapytanie OPTIONS z nagłówkami Access-Control-Request-Method i Access-Control-Request-Headers. Reguła rewritingu z warunkiem na REQUEST_METHOD zwraca dla OPTIONS pustą odpowiedź 200, dzięki czemu serwer nie uruchamia logiki aplikacji dla żądania, które nie niesie danych. Warto też pamiętać, że przy odpowiedziach spoza zakresu 2xx i 3xx zwykłe Header set bywa pomijane — wtedy stosuje się wariant Header always set.
Przykład konfiguracji krok po kroku
- Front stoi pod adresem https://app.example.com, a API pod https://api.example.com. To dwa różne origin, więc bez nagłówków CORS przeglądarka zablokuje odczyt odpowiedzi.
- W generatorze podajesz origin https://app.example.com oraz metody GET i POST.
- Jako dozwolone nagłówki żądania wpisujesz Content-Type i Authorization.
- Włączasz obsługę danych uwierzytelniających. Gwiazdka przy originie jest wtedy niedozwolona, więc podajesz konkretną domenę — inaczej przeglądarka odrzuci odpowiedź.
- Ustawiasz czas cache preflight na 3600 sekund. To dokładnie 60 minut, czyli 1 godzina — przez ten czas przeglądarka nie powtórzy zapytania OPTIONS dla tego samego żądania.
- Jeśli chcesz cache na dobę, wpisujesz 86400 sekund, czyli 24 godziny. Większa wartość oznacza mniej zapytań OPTIONS, ale wolniejsze reagowanie na zmiany polityki dostępu.
- Gotowy blok wklejasz do pliku .htaccess w katalogu API i weryfikujesz wynik poleceniem curl z metodą OPTIONS oraz nagłówkiem Origin.
Tabela referencyjna elementów reguły
| Element reguły | Za co odpowiada | Typowa wartość |
|---|---|---|
| Access-Control-Allow-Origin | wskazuje domeny, którym przeglądarka pozwoli odczytać odpowiedź | konkretny origin albo gwiazdka |
| Access-Control-Allow-Methods | metody HTTP dopuszczone w żądaniu właściwym po preflight | GET, POST, OPTIONS, PUT, DELETE |
| Access-Control-Allow-Headers | nagłówki żądania, które może wysłać przeglądarka | Content-Type, Authorization, X-Requested-With |
| Access-Control-Allow-Credentials | czy do żądania dołączane są cookies i dane uwierzytelniające | true |
| Access-Control-Expose-Headers | nagłówki odpowiedzi widoczne dla kodu JavaScript | Content-Length, X-Total-Count |
| Access-Control-Max-Age | jak długo przeglądarka pamięta wynik preflight | liczba sekund, na przykład 3600 |
| Vary | sygnalizuje serwerom pośredniczącym, że odpowiedź zależy od originu | Origin |
| RewriteRule dla OPTIONS | zwraca pustą odpowiedź 200 na zapytanie preflight | warunek na REQUEST_METHOD |
Praktyczne wskazówki wdrożenia
- Zawęź origin zamiast gwiazdki — podaj pełny adres z protokołem, bo przeglądarka porównuje go znak po znaku, a subdomena i port są traktowane jako inne źródło.
- Nie łącz danych uwierzytelniających z gwiazdką — jeśli zezwalasz na cookies, ustaw konkretną domenę, inaczej przeglądarka odrzuci odpowiedź mimo poprawnie wysłanych nagłówków.
- Dodaj Vary: Origin przy dopasowaniu warunkowym — odpowiedź różni się w zależności od źródła, więc bez tego nagłówka cache lub CDN może podać jednemu klientowi nagłówek przeznaczony dla innego.
- Testuj preflight osobnym poleceniem — wyślij OPTIONS z nagłówkami Origin i Access-Control-Request-Method, żeby zobaczyć surowe nagłówki odpowiedzi, zamiast zgadywać na podstawie komunikatów w konsoli.
- Trzymaj regułę blisko API — plik .htaccess w katalogu API ogranicza politykę do właściwego zakresu, a nie do całego serwisu.
Czego narzędzie nie uwzględnia
- To nie jest zabezpieczenie serwera — nagłówki CORS są instrukcją dla przeglądarki. Narzędzia wiersza poleceń, skrypty i aplikacje serwerowe ignorują je całkowicie, więc autoryzacja i weryfikacja uprawnień musi pozostać po stronie backendu.
- Jeden statyczny nagłówek nie obsłuży wielu domen — potrzebne jest dopasowanie warunkowe, a wygenerowana reguła zawiera jedną wartość; przy rozbudowanej liście źródeł trzeba rozbudować warunek ręcznie.
- Wynik zależy od serwera i modułów — Apache, LiteSpeed i Nginx różnią się składnią, a brak mod_headers sprawia, że reguły są po cichu ignorowane. Warstwa proxy lub CDN może dodatkowo nadpisywać nagłówki.
- Brak weryfikacji błędów aplikacji — narzędzie nie sprawdza, co serwer zwraca przy odpowiedziach błędnych ani czy aplikacja nie dodaje własnych nagłówków, które wejdą w konflikt z regułą z pliku .htaccess.
Najczęstsze pytania
Czy CORS chroni serwer?
Nie — to zabezpieczenie przeglądarki. Serwer nadal musi weryfikować uprawnienia i uwierzytelniać żądania.
Dlaczego zapytanie działa w Postmanie, a nie w przeglądarce?
Postman nie egzekwuje CORS. Przeglądarka blokuje odpowiedź, jeśli nagłówki nie zezwalają na dany origin.
Czy można zezwolić na wiele domen?
Trzeba to zrobić warunkowo (odpowiedź zależna od nagłówka Origin). Prosty nagłówek obsłuży tylko jedno źródło.
Czy CORS chroni serwer przed nieautoryzowanym dostępem?
Nie. CORS to mechanizm przeglądarki, który decyduje, czy strona może odczytać odpowiedź. Serwer nadal musi sam weryfikować tożsamość i uprawnienia, bo żądanie cross-origin dociera do niego niezależnie od nagłówków.
Czym różni się gwiazdka w Allow-Origin od konkretnej domeny?
Gwiazdka zezwala na odczyt odpowiedzi dowolnemu źródłu, ale jest niedozwolona razem z obsługą danych uwierzytelniających. Konkretna domena zawęża dostęp do jednego źródła i pozwala bezpiecznie używać cookies.
Dlaczego zapytanie OPTIONS zwraca błąd mimo poprawnej reguły?
Najczęstsze przyczyny to reguła umieszczona w innym katalogu niż obsługiwane API, warunek na metodę żądania zapisany w złej kolejności albo przechwycenie zapytania przez aplikację przed wykonaniem rewrite. Warto sprawdzić surowe nagłówki odpowiedzi osobnym poleceniem.
Jak długo przeglądarka pamięta wynik preflight?
Dokładnie tyle, ile wynosi wartość nagłówka Access-Control-Max-Age wyrażona w sekundach. Wartość 3600 oznacza godzinę, a 86400 dobę. Po tym czasie przeglądarka wyśle zapytanie OPTIONS ponownie.
Czy potrzebuję CORS, gdy front i API są na tej samej domenie?
Nie, dopóki protokół, host i port są identyczne, żądanie nie jest cross-origin i nagłówki nie są potrzebne. Wystarczy zmiana subdomeny albo portu, żeby przeglądarka zaczęła traktować je jako osobne źródła.