Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
06 Июл 2023
3 мин
4115

Разбираемся с ошибкой Access-Control-Allow-Origin в JavaScript

Одной из распространенных проблем, с которой сталкиваются разработчики, начинающие работать с JavaScript и REST API, является ошибка Access-Control-Allow-Origin. Эта ошибка

Одной из распространенных проблем, с которой сталкиваются разработчики, начинающие работать с JavaScript и REST API, является ошибка Access-Control-Allow-Origin. Эта ошибка возникает при попытке получить данные с сервера, который находится на другом источнике, или, другими словами, на другом домене, протоколе или порте.

Разработка на Java — востребованное направление, такие специалисты будут нужны на рынке еще долго. На курсе «Java-разработчик» от Skypro освоить профессию можно с нуля за 11 месяцев, даже если вы гуманитарий и ничего не знаете об IT. Программа составлена от простого к сложному и адаптирована для новичков. Преподаватели — практикующие специалисты из крупных компаний: «Сбер», «Самокат» и других.

Что такое CORS?

CORS (Cross-Origin Resource Sharing) — это механизм, который использует дополнительные HTTP-заголовки для того, чтобы разрешить браузеру получать доступ к выбранным ресурсам с сервера на источнике (домене), отличном от того, что был использован в оригинальном запросе.

Пример ошибки

Попытка выполнить следующий код приведет к ошибке Access-Control-Allow-Origin:

fetch('https://some-external-api.com/data', {
  method: 'GET'
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log('Error:', error));

Сообщение об ошибке будет выглядеть примерно так:

Fetch API cannot load https://some-external-api.com/data. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

Решение проблемы

Проблема в том, что сервер, с которого вы пытаетесь получить данные, должен указать в заголовках ответа, что он разрешает кросс-доменные запросы. Это делается добавлением заголовка Access-Control-Allow-Origin в ответ сервера.

В Skypro на курсе «Java-разработчик» вы научитесь писать программы для игр и приложений, освоите все нужные инструменты: Git, GitHub, Docker, Swagger, PostgreSQL и другие. Потренируетесь под руководством опытных наставников и соберете сильное портфолио. На курсе действует гарантия трудоустройства: поможем вам найти работу или вернем деньги за курс.

Использование прокси-сервера

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

Использование плагинов для браузера

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

Использование режима no-cors

В некоторых случаях, можно использовать режим no-cors в запросе fetch. Однако, это означает, что браузер будет автоматически блокировать любые ответы, которые не содержат правильного CORS-заголовка.

fetch('https://some-external-api.com/data', {
  method: 'GET',
  mode: 'no-cors'
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.log('Error:', error));

Освойте Java на курсе онлайн-университета Skypro. Учебе нужно будет уделять всего 10 часов в неделю: сможете совмещать с работой и личными делами. Вас ждут 440 часов теории и практики, мастер-классы с реальными рабочими задачами, опытные преподаватели, кураторы и наставники. За время обучения сделаете два полноценных проекта для портфолио и множество домашних заданий, чтобы отработать навыки.

Вывод

Ошибка Access-Control-Allow-Origin является распространенной проблемой при работе с JavaScript и REST API и связана с механизмом CORS. Существует несколько способов решения этой проблемы, включая использование прокси-сервера, плагинов для браузера или режима no-cors.

Добавить комментарий