[hate] CORS
Небольшое интро
Для тех, кто незнаком с CORS. В браузерах есть механизм, ограничивающий AJAX-запросы с других доменов. Называется он same-origin policy. А CORS — это единственный способ это блядство обойти. Работает он следующим блядским образом:
- Браузер посылает preflight request (OPTIONS)
- Сервер посылает специальный ответ с засетапленными хидерами, которые указают на то, что запрос безопасен
- При успехе сверки хидеров, браузер посылает нормальный запрос. Иначе браузер посылает юзер-код нахуй.
API и SPA
Достаточно типичной практикой является разделение API и статики. Благодаря блядскому CORS, мы испытываем двойной latency на ровном месте. Для каждого запроса.
Но у нас вроде есть кеширование preflight. Но на практике оно бесполезно и не работает. Почему? Потому что большая часть запросов у вас будут “сложные” и на них кеширование не распространяется.
no-cors
Как вы думаете, как работает в браузере режим no-cors? Зацените ответ на so. Итак, no-cors позволяет послать запрос, но не позволяет читать ответ сервера.
Т.е. заддосить чужой сервер мы можем, но прочитать ответ — нет. Охуенное секьюрити, да?
обход cors
Реализуется тривиальным прокси-сервером. Потому что same-origin policy — это клиентская политика, а не серверная.
нахуя это все
В 1995 появилась same-origin policy, которая запрещает слать запросы на чужие домены.
Почему же? Потому что при посылке запроса на домен A отправляются уже существующие куки с домена A. В те лохматые годы куки были самым массовым способом хранения кредов. В итоге, можно было сделать сайтик, которые шлет запрос вида “а отдайте мне, пожалуйста, все деньги это пользователя”.
В нынешние годы JWT + хидер Authorization захватил мир. И теперь ебланство ситуации просматривается на отлично. Вполне достаточно было вырубить отправку кук по дефолту; а если нужны куки, то вот вам CORS.
вот тут еще пишут, что некоторые ебланы используют аутентификацию на основе IP.
в чем проблема
Из-за кучки тупорылых пидарасов у половины интернета теперь проблемы на ровном месте.
Но вот особенно бесит следующее. Вы можете написать SPA и залить для публичного использования на бесплатный хостинг. Но вот использовать чужие АПИ вы бесплатно не можете. Вам нужно искать/поднимать ебучее прокси.