You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

调用rg-adguard API获取微软ISO时遇跨域:缺少Access-Control-Allow-Origin头

解决跨域请求rg-adguard.net API的问题

嘿,这个跨域报错我太熟悉了!你碰到的No 'Access-Control-Allow-Origin' header is present错误,是浏览器的同源策略在限制你——rg-adguard.net的服务器没有配置允许你的站点域名发起跨域请求,所以浏览器直接拦截了API返回的响应,不让前端拿到数据。

下面给你几个可行的解决方案,按靠谱程度排序:

1. 用自己的后端做代理(生产环境首选)

前端直接跨域请求第三方API本来就容易被浏览器拦截,最稳妥的办法是在你自己的服务器上写一个代理接口:

  • 前端调用你自己的服务器接口,把type_id传过去
  • 你的服务器作为中间层,去请求rg-adguard的API
  • 服务器拿到响应后,再把数据返回给前端

举个简单的PHP代理示例:

<?php
// 接收前端传来的type_id
$type_id = isset($_GET['type_id']) ? $_GET['type_id'] : '';
if (empty($type_id)) {
    echo json_encode(['type' => 'Error', 'message' => 'Missing type_id']);
    exit;
}

// 构造请求rg-adguard的URL
$api_url = 'https://tb.rg-adguard.net/php/get_version.php?type_id=' . urlencode($type_id);

// 用curl发起请求
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 如果需要处理HTTPS,可添加以下配置
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

$result = curl_exec($ch);
curl_close($ch);

// 设置响应头,返回数据
header('Content-Type: application/json');
echo $result;
?>

然后把你的前端代码改成调用这个代理接口:

var url = '/your-proxy.php'; // 换成你自己的代理接口路径
$.get(url, {type_id: type_id}, function (result) {
    if (result.type == 'Error base SQL') {
        alert('Error base SQL');
        return false;
    } else {
        // 继续处理你的逻辑
        var options = ...
    }
});

2. 尝试使用JSONP(如果对方API支持)

有些第三方API会支持JSONP来绕过同源限制,你可以试试给请求加个callback参数,用$.getJSON来发起请求:

var url = 'https://tb.rg-adguard.net/php/get_version.php?type_id=' + type_id + '&callback=?';
$.getJSON(url, function(result) {
    if (result.type == 'Error base SQL') {
        alert('Error base SQL');
        return false;
    } else {
        // 处理结果
        var options = ...
    }
});

不过这个方法的前提是rg-adguard的API支持JSONP格式,如果对方没做这个适配,那就没用了。

3. 本地调试临时方案(仅开发用)

如果你只是本地开发测试,可以装个浏览器插件临时关闭同源策略,比如Chrome的「Allow CORS: Access-Control-Allow-Origin」。但注意:这个方法只能自己调试用,绝对不能用于生产环境,普通用户访问你的站点时还是会碰到跨域问题。

最后提醒一句:记得遵守rg-adguard.net的API使用条款,不要过度请求或者违反他们的规则,避免后续API被限制访问。

内容的提问来源于stack exchange,提问作者Ave

火山引擎 最新活动