Рубрики
Без рубрики

Объясняется заголовок Access-Control-Actor-Orite-Arector – с примером CORS

Часто при вызове API вы можете увидеть ошибку в вашей консоли, которая выглядит так: Доступ к извлечению на «http://somesite.com» из происхождения «http://yoursite.com» был заблокирован политикой CORS: заголовок «Access-Control-Play-origone» имеет значение, которое не равно прилагаемое происхождение

Часто при вызове API вы можете увидеть ошибку в вашей консоли, которая выглядит так:

Access to fetch at 'http://somesite.com' from origin 'http://yoursite.com' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value that is not equal to the supplied origin

В этом посте мы собираемся узнать, почему эта ошибка происходит и как вы можете это исправить.

Что такое заголовок доступа-элемента управления?

Access-Control-Allow-light это заголовок CORS. CORS, или обмен ресурсами CROSS Origin, является механизмом для браузеров, чтобы позволить сайту работать по происхождению A, чтобы запросить ресурсы из происхождения B.

Происхождение – это не просто имя хоста, но комбинация порта, имени хоста и схемы, например – http://mysite.example.com:8080/

Вот пример того, где это входит в действие –

  1. У меня есть происхождение A: http://mysite.com. И я хочу получить ресурсы из происхождения B: http://yoursite.com Отказ
  2. Чтобы защитить вашу безопасность, браузер не позволит мне доступа к ресурсам с yousite.com и заблокирует мой запрос.
  3. Чтобы позволить началу Acount A для доступа к вашим ресурсам, ваше происхождение B нужно будет позволить браузеру знать, что для меня все в порядке, чтобы получить ресурсы из вашего происхождения.

Вот пример из сети Developer Mozilla, которая действительно объясняет это действительно хорошо:

С помощью CORS браузеры позволяют истоками делиться ресурсами между собой.

Есть Немногие заголовки которые позволяют обменять ресурсы по всему происхождению, но главный это Access-Control-Allow-light Отказ Это говорит о браузере, какое происхождение разрешено получать запросы с этого сервера.

Кому нужно установить доступа-контроль-разрешение –

Чтобы понять, кому нужно установить этот заголовок, рассмотрите этот сценарий: вы просматриваете веб-сайт, который используется для просмотра и прослушивания песен. Веб-сайт пытается сделать соединение с баком на фоне злонамеренно.

Таким образом, у кого есть окончательная способность предотвратить этот вредоносный сайт воровать ваши данные из банка? Банк! Итак, банк должен будет защитить его ресурсы, установив Access-Control-Allow-light заголовок как часть ответа.

Просто помните: происхождение, ответственное за обслуживание ресурсов, нужно будет установить этот заголовок.

Как использовать и когда пройти этот заголовок

Вот пример значений, которые вы можете установить:

  1. Access-Control-Allow-Origin: * : Позволяет любому происхождению.
  2. Доступ-контроль-разрешение: http://mysite.com : Разрешить запросы только от mysite.com.

Увидеть это в действии

Давайте посмотрим на пример. Вы можете проверить этот код На моем Github Repo Отказ

Мы собираемся построить сервер по происхождению A http://localhost: 8000 который отправит строку Привет с API конечная точка. Мы собираемся позвонить с этой конечной точкой, создавая клиента по происхождению B http://localhost: 3000 а затем используйте fetch, чтобы запросить ресурс. Мы ожидаем увидеть строку Привет пропущено по происхождению A в консоли браузера происхождения B.

Скажем, у нас есть происхождение http://localhost: 8000 Это служит на этот ресурс на /API конечная точка. Сервер отправляет ответ с заголовком Access-Control-Allow-light Отказ

const express = require("express");

const app = express();
const port = process.env.SERVER_PORT || 8000;

// Add Access Control Allow Origin headers
app.use((req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "https://yoursite.com");
  res.header(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept"
  );
  next();
});

app.get("/api", (req, res) => {
  res.json("Hello");
});

app.listen(port, () => console.log(`Listening on port ${port}`));

На стороне клиента вы можете назвать эту конечную точку, позвонив принести нравится:

fetch('http://localhost:8000/api')
.then(res => res.json())
.then(res => console.log(res));

Теперь откройте консоль вашего браузера, чтобы увидеть результат. Поскольку заголовок в настоящее время установлен, чтобы разрешить доступ только от https://yoursite.com , браузер заблокирует доступ к ресурсу, и вы увидите ошибку в вашей консоли.

Теперь, чтобы исправить это, измените заголовки к этому:

 res.setHeader("Access-Control-Allow-Origin", "*");

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

Заинтересованы в большем количестве учебных пособий и JSBYTES от меня? Подпишитесь на мою рассылку.

Оригинал: “https://www.freecodecamp.org/news/access-control-allow-origin-header-explained/”