Ситуация, в которой видно суть
Держите открытыми две вкладки. В одной — интернет-банк, куда вы залогинены и где на экране висит ваш баланс. В другой — какой-то сайт, на который вы забрели по ссылке из выдачи, ничего особенного. Теперь вопрос, который на первый взгляд кажется надуманным, а на деле упирается в фундамент всей веб-безопасности: что мешает скрипту со второго сайта взять и прочитать ваш баланс из первого?
Разберёмся, что технически ничего не мешает. Обе вкладки живут в одном браузере, браузер имеет доступ к обеим. Скрипт со случайного сайта вполне мог бы сформировать запрос к домену банка. Мало того, браузер по умолчанию приложил бы к этому запросу ваши куки — те самые, по которым банк отличает вас от постороннего, — то есть запрос ушёл бы как будто от вас, залогиненного. Ответ с балансом вернулся бы. Оставалось бы прочитать его и отправить куда угодно. Ни одного технически сложного шага в этой цепочке нет.
И тем не менее этого не происходит никогда. Не потому что банк как-то особо защищён, а потому что в каждый браузер вшито правило, которое работает всегда и по умолчанию, даже когда о нём никто не вспоминает. Правило это называется Same-Origin Policy, и именно оно не даёт одной вкладке читать содержимое другой. С него всё и начинается, а CORS, о который потом обязательно спотыкается каждый, кто впервые тянет на свой сайт данные с чужого API, — это уже надстройка над ним. Но чтобы понять CORS, надо сперва как следует понять само правило, потому что почти вся…