Почніть із того, що розділите дві речі, які змінилися одночасно: мережевий шлях і застосування браузером. VPN змінює адресу виходу; він не змінює джерело сторінки, яке складається зі схеми, хоста й порту. Якщо запит тепер успішний, щось змінилося у відповіді або змінився сам запит. З’ясувати, що саме, — це все розслідування.

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

Джерело — не IP-адреса

Джерело — це схема, хост і порт. Це не адреса, з якої виходять пакети, і не IP, який бачить сервер. Тому VPN може змінити кожну спостережувану адресу й залишити джерело незмінним. Браузер порівнює Access-Control-Allow-Origin відповіді з джерелом сторінки, і адреса виходу ніколи не потрапляє до цього порівняння.

Тому розширення або проксі, які ніби виправляють помилку CORS, роблять інше: переписують заголовки або спрямовують запит так, що він більше не є міжсайтовим. Ні те, ні інше не є властивістю VPN.

Що браузер насправді надсилає

Для міжсайтового запиту, який не є простим, браузер спершу надсилає попередню перевірку OPTIONS, що несе передбачуваний метод і заголовки. Сервер має відповісти з дозволами, які він надає, і справжній запит іде лише тоді, коли ця відповідь задовольняє правила. VPN змінює шлях, який несе обидва обміни, і може змінити те, що відповідають проміжні сервіси. Він не змінює рядок джерела чи вимогу попередньої перевірки.

Клієнт командного рядка зазвичай нічого з цього не показує. Він може не надсилати заголовок Origin, часто пропускає попередню перевірку і може нести інші облікові дані. Тіло, повернуте curl, доводить, що сервер відповів curl.

Знайдіть відповідь, яка змінилася

Порівнюйте фактичну відповідь на кожному шляху, а не лише код стану. Дивіться на заголовки з дозволами CORS, тип вмісту, будь-яке переспрямування і на те, чи не створив варіант WAF або CDN іншу сторінку. Регіональна відмова, переспрямування на автентифікацію або сторінка помилки без заголовка дозволу не проходять у браузері, хоча виглядають як помилка CORS. Це відмінності шляху доставки, і саме їх треба задокументувати.

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

Виправляйте сервіс, а не застосування

Коли сервіс ваш, явно вкажіть дозволені джерела й можливості запиту, а потім прочитайте помилки, які створюють його фронтенд і посередники. Якщо ні, надішліть власнику сервісу очищене порівняння. Ніколи не включайте до цього звіту cookie, заголовки авторизації або експорт сесій, бо це облікові дані, для захисту яких існує політика.

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

Запишіть обидві відповіді, використане джерело і пройдений шлях. Цей запис перетворює чутку про VPN на помилку сервісу.

Схожі статті