Проблема (на самом деле не проблема, но это сценарий)

Если вы используете Angular или jQuery или, возможно, запрос XHR, то вы говорите определенному серверу: «Привет, сервер, это запрос POST / GET, и это мои ПАРАМЕТРЫ, вы мне ответите?» Но, к сожалению, ваш веб-браузер возвращает в консоли что-то вроде этого: «Эй, ты не можешь этого сделать, потому что»:

На запрошенном ресурсе нет заголовка «Access-Control-Allow-Origin». Следовательно, к источнику "null" доступ не разрешен.

В тот момент вы скажете! "О нет! Но почему ?? ПОЧЕМУ !!" вы все сделали правильно, все ваши параметры и заголовки установлены, но у вас все еще есть та же проблема. Вы гуглите и находите некоторые решения или обходные пути, чтобы справиться с этим. Но что такое CORS?

Прежде всего вам нужно знать…

Что такое политика безопасности?

В бизнесе политика безопасности - это документ, в котором в письменной форме указывается, как компания планирует защитить свои физические и информационные активы (ИТ). Политику безопасности часто считают «живым документом», что означает, что документ никогда не заканчивается, а постоянно обновляется по мере изменения технологий и требований сотрудников.

Серверы используют политику безопасности, чтобы знать, как обращаться с доступом к ресурсам на одном сервере или между серверами. Политики безопасности на серверах снижают риски, связанные с запросом активов, размещенных на другом сервере.

Что такое CORS?

Совместное использование ресурсов между источниками (CORS) - это механизм, который использует дополнительные заголовки HTTP, чтобы позволить пользовательскому агенту получить разрешение на доступ к выбранным ресурсам с сервера в другом источнике (домене), отличном от текущего сайта. Пользовательский агент выполняет HTTP-запрос между источниками, когда он запрашивает ресурс из другого домена, протокола или порта, отличного от того, из которого произошел текущий документ.

Пример запроса из разных источников: HTML-страница, обслуживаемая с http://domain-a.com, делает запрос ‹img› src для http://domain-b.com/image.jpg. Многие страницы в Интернете сегодня загружают ресурсы, такие как таблицы стилей CSS, изображения и сценарии, из отдельных доменов, таких как сети доставки контента (CDN).

Почему ваши запросы работают в некоторых приложениях, таких как POSTMAN, а не в вашем браузере?

POSTMAN - это инструмент для разработчиков, а не браузер.

Каковы преимущества использования CORS?

Стандарт CORS необходим, потому что он позволяет серверам указывать не только, кто может получить доступ к своим активам, но также и то, как они могут быть доступны.

Запросы между источниками выполняются с использованием стандартных методов HTTP-запроса. Большинство серверов разрешают запросы GET, что означает, что они позволяют ресурсам из внешних источников (например, веб-страницы) читать свои ресурсы. Однако методы HTTP-запросов, такие как PATCH, PUT или DELETE, могут быть отклонены для предотвращения злонамеренного поведения. Для многих серверов это сделано намеренно. Например, вполне вероятно, что сервер A не хочет, чтобы серверы B, C или D редактировали или удаляли его активы.

С помощью CORS сервер может указать, кто может получить доступ к его ресурсам и какие методы HTTP-запроса разрешены из внешних ресурсов.

Каково решение ?

Самое простое решение - сказать серверу: «Выполняйте и обслуживайте запросы из этих источников!» 😆

На APACHE:

Access-Control-Allow-Origin: http://www.example.com

Контроль доступа Разрешить Origin с подстановочным знаком, разрешающим все домены:

Доступ-Контроль-Разрешить-Происхождение: *

НО ОСТЕРЕГАЙТЕСЬ

Политика одинакового происхождения с подстановочными знаками уместна, когда страница или ответ API считаются полностью общедоступным контентом и предназначены для доступа всем, включая любой код на любом сайте. Например, бесплатный веб-шрифт на публичном хостинге вроде Google Fonts.

Есть ли обходной путь или быстрое решение для режима разработки?

Да, НО не рекомендуется, используйте на свой страх и риск.

  • Мы можем подделать (подделать) заголовок «Origin» при запросе - примерно так:
xhr.setRequestHeader("Origin", 'www.exemple.com');
  • Используйте расширение браузера в Chrome или Firefox.
  • Отключите безопасность в браузере:

На хроме или хроме

Примечание. Удалите все экземпляры Chrome перед запуском команды

chromium-browser --disable-web-security --user-data-dir

При первом открытии браузер предупредит вас, что вы используете неподдерживаемую командную строку, которую вы можете проигнорировать.

  • Вы можете установить прокси!

В angular2 + вы можете изменить запросы на «/ api», например, и создать прокси, который перенаправляет «/ api / *» на конкретный URL.

Чтобы настроить его, нам нужно создать файл proxy.conf.json в корне нашего проекта Angular CLI. Контент должен выглядеть следующим образом

{
"/api/*": {
"target": "http://localhost:3000",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
}

или вы можете использовать плагин, например этот:



Заключение

Я надеюсь, что вы кое-что узнали о CORS, это отличная вещь, которую можно прочитать для получения дополнительной информации, это многие другие ограничения, которые вы можете использовать для создания собственной политики безопасности в зависимости от ваших потребностей.

Front-end разработчики могут использовать некоторые обходные пути для целей разработки.