调用 REST API、JavaScript 时的 CORS 策略 [重复]

Posted

技术标签:

【中文标题】调用 REST API、JavaScript 时的 CORS 策略 [重复]【英文标题】:CORS Policy when calling an REST API, JavaScript [duplicate] 【发布时间】:2020-02-10 21:36:39 【问题描述】:

我正在尝试在 javascript 中调用 API,如果我在 URL 栏中编写它,它可以工作,但如果我使用我的代码,它有 CORS 策略问题。我无权访问服务器,我应该找到一种在客户端解决的方法。 这是我的代码:

var xhr = new XMLHttpRequest();

    var url = 'http://api.openweathermap.org/data/2.5/weather?q=London&APPID=My-API-Key';
    xhr.open('GET', url, true);
    xhr.withCredentials = true;
    xhr.setRequestHeader("APPID", "MY API Key");
    xhr.setRequestHeader('Content-Type', 'application/json');
    xhr.setRequestHeader('Origin', '*');
    //console.log(json);

    xhr.send();

    xhr.onload = function () 
        if (xhr.status != 200) 
            alert(`Error $xhr.status: $xhr.statusText`);
         else 
            alert(`Done, got $xhr.response.length bytes`);
        
    ;

    xhr.onprogress = function (event) 
        if (event.lengthComputable) 
            alert(`Received $event.loaded of $event.total bytes`);
         else 
            alert(`Received $event.loaded bytes`); // no Content-Length
        

    ;

    xhr.onerror = function () 
        alert("Request failed");
    ;

</script>

它有错误:

从源“https://localhost:44399”访问“https://api.openweathermap.org/data/2.5/weather?q=London&APPID=My-API-key”处的 XMLHttpRequest 已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:“Access-Control-Allow-Origin”的值' 当请求的凭证模式为 'include' 时,响应中的标头不能是通配符 '*'。 XMLHttpRequest 发起的请求的凭证模式由 withCredentials 属性控制。

有人知道如何解决这个错误吗?我应该将我的 Origin 或其他任何内容作为标头发送到哪里才能从服务器获得正确的响应? 我应该在客户端处理它,并且我已经在标题中写了 Origin * 但仍然无法正常工作。

最好的问候

【问题讨论】:

只需在 SO 或 Wikipedia 或 Google 上搜索“CORS”或... 您的 API 服务器必须允许来自不同来源的请求。通常,服务器必须发送响应标头“Access-Control-Allow-Methods”和“Access-Control-Allow-Origin”以允许这些请求。 我可以看到您的来源为空。你是从文件中运行它吗?尝试运行服务器并从那里运行它。 其实我没有访问服务器的权限,只是有调用它的API密钥,它不是内部使用的。有没有办法在客户端解决它?我可以做任何事情或发送一些东西作为标题吗? 我是说从服务器而不是文件中运行您的代码。 【参考方案1】:

您是否尝试过在您的服务器上使用“allow-origin: *”标头? 这可能是问题的原因(您的服务器不接受这些请求)

【讨论】:

我没有任何访问服务器的权限,我正在使用免费的API测试并获得使用它的密钥,无法修改服务器

以上是关于调用 REST API、JavaScript 时的 CORS 策略 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

javascript 带有REST API调用的Html表

如何从 JavaScript 调用 REST Web 服务 API?

如何在Javascript中进行rest API调用[重复]

如何使用 javascript/jquery/AJAX 调用 Django REST API?

javascript 提取d.data REST API调用SharePoint 2013

从 Angular4 调用 Spring Rest 服务时的 CORS(跨源问题)