Мережа/HTTP

CORS Checker / Explainer

Покроково пояснити, чи дозволить браузер крос-доменний запит — simple/preflight-класифікація, перевірка Access-Control-* заголовків відповіді, підсумок.

Credentials (fetch)

По одному на рядок, "Назва" або "Назва: значення" — значення на класифікацію не впливає.

Візьміть із вкладки Network у DevTools (заголовки самої відповіді або preflight OPTIONS) чи curl -I.

CORS (Cross-Origin Resource Sharing) — механізм браузера, що вирішує, чи дозволити JavaScript з одного сайту читати відповідь із сервера на іншому домені. Інструмент пояснює покроково, чи пройде конкретний запит, і які заголовки Access-Control-* для цього потрібні.

Як користуватися

Типові сценарії

Що варто памʼятати

CORS — це захист браузера користувача, а не сервера: обмеження діють лише для запитів із коду сторінки в браузері, а не для запитів із curl, Postman чи сервера до сервера.

Access-Control-Allow-Origin: * несумісний із credentials: include — для запитів з cookie чи авторизацією сервер повинен повернути конкретний origin, а не зірочку.

Стаття про цей інструмент: CORS: чому браузер блокує "звичайні" запити до іншого домену

Часті запитання

Чому запит завершується помилкою CORS, хоча сервер відповів успішно?

CORS застосовує браузер, а не сервер — якщо у відповіді відсутній заголовок Access-Control-Allow-Origin, що відповідає джерелу запиту, браузер блокує читання відповіді через JavaScript, хоча сам запит завершився успішно.

Чим відрізняється простий запит від запиту з попередньою перевіркою (preflight)?

Прості запити (базові GET/POST зі стандартними заголовками) проходять напряму, а запити з користувацькими заголовками, іншими методами чи певними типами контенту спочатку викликають попередній запит OPTIONS для перевірки дозволу перед відправкою реального запиту.

Чи надсилає перевірка заголовків CORS тут мої дані на сервер?

Інструмент перевіряє заголовки, які ви надаєте, або отримує їх напряму з вашого браузера — жоден проміжний сервер не зберігає дані вашого запиту.

Чи захищає CORS API від зловмисних запитів?

Ні. CORS обмежує лише те, що браузер дозволить прочитати JavaScript-коду на сторінці — зловмисник може надіслати той самий запит напряму через curl чи скрипт, минаючи браузер і будь-які CORS-обмеження повністю.

Чому Access-Control-Allow-Origin: * не працює разом із credentials: include?

Специфікація забороняє це поєднання навмисно — дозволити будь-якому сайту читати відповіді разом із cookie чи авторизацією користувача було б серйозною діркою в безпеці, тож у такому разі сервер має повернути конкретний Origin, а не "*".

Статті: Мережа/HTTP

Розбір URL: з яких частин складається веб-адреса

Чому в URL є частина після символу # , яку сервер навіть не отримує.

Query String проти JSON: чому GET-параметри такі обмежені

Чому передати масив або вкладений об'єкт через query string URL не так просто, як через JSON.

User-Agent: чому цей рядок такий заплутаний

Чому Chrome, Safari та Edge всі містять у User-Agent слова "Mozilla" і "Safari" одночасно.

Basic Authentication: як найпростіший спосіб автентифікації працює в HTTP

Чому Basic Auth обов'язково потребує HTTPS, адже Base64 — це не шифрування, а лише кодування.

HTTP-заголовки: що приховано в кожному запиті й відповіді

Чому заголовок Content-Type визначає, як браузер інтерпретує тіло відповіді сервера.

Cookies: як невеликий шматок тексту зберігає стан сесії

Чому атрибут HttpOnly захищає cookie від крадіжки через шкідливий JavaScript-код.

Заголовки email: як простежити шлях листа від відправника до вас

Чому заголовки Received потрібно читати знизу вгору, щоб простежити шлях листа.