Что такое CORS?

Здравствуйте, можете, пожалуйста, объяснить мне на пальцах кратко, что такое Cross-origin resource sharing
Читал википедию, w3, статьи, но так и не понял, что это такое, где и когда нужно использовать.
Для чего он вообще нужен?
Также буду признателен. если скажете название проектов, где используется CORS
  • Вопрос задан
  • 23606 просмотров
Решения вопроса 3
@DrVolk
Все ответы из серии лучше бы молчал... Смысл повторять то, что написано в википедии. Вам в вопросе человек явно указал - НА ПАЛЬЦАХ, а они ему про стандарты... Дали бы просто ссылку на MDN - там самая лучшая документация обо всём: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
На русском тоже есть статьи: https://grishaev.me/cors

Вот моя текущая проблема, объсняю на её примере:

На нашем сервере (Сервер А) размещается Ангуляр приложение (DAPP), представляющее собой интерфейс к Ethernet смарт-контракту, который грубо говоря является нашим бэкендом.

На стороннем сервисе (Сервер Б) запущен http-интерфейс для доступа к нашему контракту (фактически это шлюз в сеть Ethereum). Это бесплатный сервис, к которому у нас нет доступа (Infura).

Мне нужно из моего DAPP, запущенного в браузере пользователя и которое загрузилось с Сервера А, делать http-запросы на Сервер Б, и тут в браузере выскакивает CORS и кричит НИИИИЗЯЯЯЯЯЯЯЯ! Причём в Chrome всё ок, а в долбаном тормозном Firefox (господи, сократи число пользующиегося им идиотов, чтобы он скорее издох) вылетает ошибка. Ибо, как завещает CORS, негоже JS коду, загруженному с одного адреса, делать http запросы на другой. Причём CORS устроен так, что эта ошибка не дебажится с помощью JS - типа для того чтобы это ограничение не смогли никак обойти. Поэтому какие бы я не прописывал Серверу А заголовки 'Allow-Origin', это ничего не меняет. В Гугле уже осознали весь идиотизм ситуации и в новых версиях Хрома уже не блочат всё подряд, как раньше, пропуская “простые” запросы (GET/POST), остальный браузеры пока тупят.

ПС. Проблему решили запуском прокси сервера, который добавляет в ответы от Сервера 2 заголовки Access-Controll-Allow-Origin с адресом Сервера 1. Тоесть Сервер 2 должен сказать браузеру, что он доверяет коду, загруженному с Сервера 1. Вот и весь CORS.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Cross-Origin.... это значит "между хостами". То есть вы делаете запросы с "localhost:3000" на "localhost:8080" или с "example.com" на "google.com", или с "example.com" на "api.example.com".

Resource - тобишь ресурсы. Можете почитать что это такое в контексте REST или HTTP или URI.

Sharing - ну тут я думаю тоже должно быть понятно. "обмен". То есть это правила которые определяют "можно ли чуваку получить доступ к этому ресурсу".

Нужна эта штука для того что бы говорить "разрешает ли сервак запросы с этого орижина на этот ресурс".
Ответ написан
muhammad_97
@muhammad_97
PHP-разработчик
Заголовки, которые сервер посылает браузеру при AJAX-запросе.

Они необходимы для предотвращения несанкционированного доступа к данным пользователя, которые находятся на другом сервере.

technology.inmobi.com/blog/understanding-cross-ori...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Это часть стандарта HTTP, HTTP-заголовки, которые сервер сайта возвращает клиенту, в том числе браузеру, давая понять, что разрешает HTTP-запросы (доступ к содержимому) со всех или только с заданных доменов (URL), но действует это только в браузере, то есть для запросов с клиентской стороны на страницах того сайта (JavaScript (AJAX), Flash, <iframe>), а если запрос делается с сервера, то ограничить невозможно, ограничениями "занимается" браузер именно, сервер ничем не отличается от обычного ПК. По умолчанию сервер (Apache/nginx) всегда запрещает доступ ко всем своим ресурсам, чтобы разрешить нужно отредактировать скрипты, чтобы к HTTP-ответу добавляли разрешающий заголовок для HTTP, и добавить разрешения в crossdomain.xml для Flash. Открытый же доступ бывает у "публичных" API, разрешающих такое использование, обычно они имеют "обертки" на JavaScript, внутри которых такие запросы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы