слов.арь · bisovka

объясни cors --простыми-словами

Иллюстрация к термину «CORS»

CORS

КороткоСамая непонятная ошибка, с которой сталкивается новый билдер, звучит как "blocked by CORS policy". Будто ты сделал что-то незаконное.

Самая непонятная ошибка, с которой сталкивается новый билдер, звучит так: "blocked by CORS policy." Будто ты сделал что-то незаконное. Нет. Твой браузер просто сверяет список гостей.

Эта штука плавит мозг, потому что ошибка вроде бы обвиняет тебя, хотя правило даже не твое, чтобы ты мог его нарушить. Давай накроем стол с фронтендом и бэкендом. У твоего приложения есть фронтенд, часть, которая работает в браузере (зал ресторана), и он хочет что-то от бэкенда в другом месте (кухня другого сайта). Допустим, твой сайт mysite.com хочет забрать данные из другого сервиса на api.othersite.com.

Вышибала и список гостей. У каждого бэкенда на двери стоит вышибала со списком, какие другие сайты могут говорить с ним изнутри браузера. Когда твой фронтенд пытается вызвать api.othersite.com, браузер тихо подходит к этому вышибале сначала и спрашивает: «mysite.com есть в твоем списке?»

**Вот поворот, после которого все щелкает: это браузер следит за правилом, и он делает это, чтобы защитить тебя.** CORS расшифровывается как Cross-Origin Resource Sharing, и это можно сразу забыть. Это правило безопасности, встроенное в каждый браузер. Оно нужно, чтобы мутный сайт, на который ты случайно зашел в одной вкладке, не мог тихо отправлять запросы в твой банк в другой вкладке, пользуясь тем, что ты там уже залогинен. Браузер работает твоим телохранителем. Просто пишет отказ так, будто подозреваемый — ты.

Признак, который доказывает, что это CORS. Посмотри, что происходит, когда ровно тот же вызов делает что-то кроме браузера. Агент, который вызывает этот API, или команда, которую ты запускаешь в терминале, получает данные без всякой CORS-ошибки. Нет браузера посередине, нет вышибалы, нет списка гостей. CORS — чисто браузерное правило. Так что если вызов работает из терминала, но умирает в веб-приложении, почти всегда дело в нем.

И чинится это обычно не на твоей стороне. Другой сайт должен добавить твой сайт в свой список гостей, маленькой настройкой: «mysite.com разрешен». Если ты владеешь обеими сторонами, добавляешь сам. Если другой конец не твой, стандартный ход — перестать дергать его прямо из браузера и провести запрос через свой бэкенд, сервер к серверу, где вышибалы вообще нет.

CORS не наказывает тебя. Это твой браузер спрашивает вышибалу другого сайта, есть ли ты в списке. Исправление — попасть в список, а не кричать на дверь.

← все термины