CORS контролируется бэкэндом.
Браузер не позволяет вашему коду получить доступ к ответу, потому что браузер не видит Access-Control-Allow-Origin
в ответе.
С CORS выполняется предварительный запрос ксервер, чтобы увидеть, если запрос разрешен.Вам нужно будет, чтобы ваш сервер отвечал на запросы с OPTIONS
в качестве метода запроса, установив заголовок Acces-Control-Allow-Origin: *
, который будет разрешать запросы из любого источника.В качестве альтернативы, вы можете разрешить только определенные источники Acces-Control-Allow-Origin: http://example.com.
Вещи все еще могут работать, сделав запрос через прокси-сервер, когда прокси-сервер отправляет соответствующий заголовок CORS от имени вашего запроса.
const proxy = "https://cors-anywhere.herokuapp.com/";
const url = "https://domainB.com/post.php";
fetch(proxy + url)
.then(response => response.text())
.then(contents => console.log(contents))
.catch(() => console.log("CORS Error" + url ))
Выполнение запроса через прокси будет работать таким образом
- Прокси-сервер CORS перенаправит ваш запрос на
https://domainB.com/post.php
- Ответ от
https://domainB.com/post.php
с Access-Control-Allow-Origin
заголовками. - Теперь ваш браузер может видеть
Access-Control-Allow-Origin
заголовков, присутствующих в заголовке ответа.
Более подробное объяснение вы можете проверитьиз этого
https://stackoverflow.com/a/43881141/2850383