Обработка проблем CORS в Fetch API

Sbenny.com доверяют 1,331,894 XNUMX XNUMX счастливых пользователей с 2014 года.
Зарегистрируйтесь

эльфийский11

Lurker Уровень 0️⃣
Я работаю над проектом веб-разработки, в котором использую Fetch API для отправки запросов из разных источников в другой домен. Однако я сталкиваюсь с проблемами CORS (совместное использование ресурсов между источниками), и мои запросы блокируются. Я попробовал несколько решений, которые нашел в Интернете, но у меня все еще есть проблемы. Вот упрощенная версия моего кода:
JavaScript:
fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => {
    console.log(data);
  })
  .catch(error => {
    console.error('Error fetching data:', error);
  });
Я слышал об использовании заголовков CORS на стороне сервера для разрешения запросов из разных источников, но не знаю, как их реализовать. Может ли кто-нибудь указать мне, как правильно справляться с проблемами CORS? Как мне настроить свой сервер, чтобы разрешать запросы из моего домена? Я использую Express.js на стороне сервера. Любая помощь будет принята с благодарностью!
 

Sbenny

Сумасшедший ученый
Штатный сотрудник
Администратор
Отряд СБ Мод ⭐
✔ Утвержденный релизер
Активный пользователь
Вы можете использовать CURL для сохранения кэшированной копии содержимого любых URL-адресов в файл, чтобы затем открыть такой файл вместо прямого доступа к внешнему веб-сайту.

Пример:


PHP:
example.php
<?php

$url = $_GET['url'];

function cache_url($url, $skip_cache = FALSE) {

    // settings

    $cachetime = 604800; //one week

    $where = "gcache";

    if ( ! is_dir($where)) {

        mkdir($where);

    }

    

    $hash = md5($url);

    $file = "$where/$hash.cache";

    

    // check the bloody file.

    $mtime = 0;

    if (file_exists($file)) {

        $mtime = filemtime($file);

    }

    $filetimemod = $mtime + $cachetime;

    

    // if the renewal date is smaller than now, return true; else false (no need for update)

    if ($filetimemod < time() OR $skip_cache) {

        $ch = curl_init($url);

        curl_setopt_array($ch, array(

            CURLOPT_HEADER         => FALSE,

            CURLOPT_RETURNTRANSFER => TRUE,

            CURLOPT_USERAGENT      => 'User-Agent: Mozilla/5.0 (Linux; Android 9; moto g(7) play) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.92 Mobile Safari/537.36',

            CURLOPT_FOLLOWLOCATION => TRUE,

            CURLOPT_MAXREDIRS      => 5,

            CURLOPT_CONNECTTIMEOUT => 15,

            CURLOPT_TIMEOUT        => 30,

        ));

        $data = curl_exec($ch);

        curl_close($ch);

        

        // save the file if there's data

        if ($data AND ! $skip_cache) {

            file_put_contents($file, $data);

        }

    } else {

        $data = file_get_contents($file);

    }

    

    return $data;

}

echo cache_url($url, FALSE);

?>
Затем вы просто набираете: example.com/example.php?url=the_link_here.

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

Помните, что вам также необходимо создать папку с именем «gcache» в том же каталоге, что и файл example.php.
 
Топовое