当前位置: 首页 > 知识库问答 >
问题:

缺少CORS标头“访问控制允许来源”

阎嘉荣
2023-03-14

我正在尝试将webUntis(文档)API用于学校项目。现在,我只是尝试建立与API的任何类型的连接。

var result;
const url = 'https://api.webuntis.dk/api/status';
var xhr = new XMLHttpRequest();

xhr.open('GET',url, true);
xhr.setRequestHeader('Access-Control-Allow-Origin','*');
xhr.setRequestHeader('Content-type','application/json');
xhr.setRequestHeader('Access-Control-Allow-Methods','GET');
xhr.setRequestHeader('X-API-KEY', '/*API KEY*/');
xhr.send();


xhr.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        result = xhr.responseType;
        console.log(result);
    }
};

此代码产生以下错误消息:

已阻止跨源请求:同一源策略禁止读取位于的外部资源https://api.webuntis.dk/api/status(原因:缺少CORS标头“访问控制允许来源”)。

这个问题可能如何解决?也许我的API密钥是错误的?

免责声明:错误消息是从德语翻译过来的。

共有3个答案

宗鸿博
2023-03-14

这基本上意味着这个API没有配置为从另一个网页调用。跨原点是指从一个域(原点)向另一个域发出HTTP请求。此API旨在从服务器应用程序中使用。如果您需要从一个网页调用它,您需要创建一个简单的代理服务器,您的网页可以调用它来向webUntis发出请求。

云鸿祯
2023-03-14

CORS是什么?

来自MDN:

跨原点资源共享(CORS)是一种机制,它使用额外的HTTP标头,让用户代理获得访问来自不同原点(域)服务器的选定资源的权限,而不是当前使用的站点。当用户代理从不同于当前文档起源的域、协议或端口请求资源时,它会发出跨源HTTP请求。

解决方案

您需要在服务器中设置CORS权限。(https://api.webuntis.dk/api/status

例如:

>

  • PHP

    铁轨

    #在配置/应用程序中。rb配置。行动与调度。默认_头={“访问控制允许源”=

    注意:将*更改为要允许CORS的特定URL。“*”非常不鼓励使用,除非您提供的公共API是供任何消费者访问的。

  • 颜文昌
    2023-03-14

    您正在向另一个站点发出请求,在本例中是位于api.webuntis.dk的API。这种类型的请求被称为"交叉起源请求"

    为了让这些请求在JavaScript中工作,它们端的服务器需要允许它们。

    这是通过他们的服务器发送特殊的CORS头来完成的,最基本的一个是“访问-控制-允许-起源”头。

    我猜API提供商没有预见或计划从前端使用此API(例如浏览器中的JavaScript),因此您必须解决这个问题。

    一种方法是设置您自己的服务器,让JavaScript代码向您的服务器和服务器发出请求,然后向API发出请求,因为服务器端代码不绑定到CORS头。

    或者,您可以在URL前面加上https://cors.io像这样:

    const url = 'https://cors.io/?https://api.webuntis.dk/api/status';
    
     类似资料:
    • 我的跨源请求被阻止了: 同源策略不允许从http://localhost:8092/authenticate读取远程资源。(原因:CORS标头'Access-Control-Allow-Origin'丢失)。

    • 请参阅下面的产品控制器类服务器端

    • 错误:我在Firefox中得到以下内容:外国站点查询被阻止:同源策略不允许读取远程资源http:// localhost:8080 / api / v1 / post /。(原因:“访问控制-允许-源”CORS 标头不存在) 我已经花了几个小时允许CORS与我的Spring Boot服务器通信,以使我的REACT UI与服务器通信。关于堆栈溢出,有许多措辞类似的问题,但建议的解决方案中没有一个解决

    • 问题内容: 我试图使CORS请求正常工作。使用以下JS代码,我得到此错误: 这是JS代码: 当我使用chrome的devtools查看网络时,我发现确实没有标题。但是,当我手动加载该网站时,它就存在了! 我使用以下代码设置标题: 希望能有所帮助! 问题答案: 它说这意味着您的服务器应用程序需要调整以接受跨源请求。由于安全原因,默认情况下跨源请求不起作用。您需要启用它们。 对于django,有一个维

    • 我正在开发一个带有jhipster V4.5.6的Spring启动应用程序。但无法配置 CORS。 下面是我的application-dev.yml文件: WebConfigurer.java如下: 和安全配置。java文件如下所示: 现在,我可以使用 GET 请求。但是当我使用POST时,如下所示: 我得到以下错误: XMLHttpRequest 无法加载 http://localhost:80

    • 我在后端使用spring boot服务,在前端使用angular 6。 在spring boot中,我使用启用了cors。 并且我正在为每个服务使用拦截器。 在前端呼叫服务中: 如果使用拦截器,我会得到以下异常。如果不使用隔膜,我不会得到cors错误。 加载失败http://localhost:7070/example/myservice:飞行前响应中的访问控制允许标头不允许请求标头字段访问控制允