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

错误“即使在服务器和客户端上设置了标头,请求的资源上也没有'Access-Control-Allow-Origin'标头”

訾稳
2023-03-14

我在端口8002上运行了一个NodeJS/Express后端API服务器,在端口3000上运行了一个ReactJS前端应用程序。

我从reactJS前端应用程序提交了一个表单,以发布在API服务器上,该服务器将它保存到数据库中。

我调用一个函数saveAndContinue来提交表单。

下面是这样做的片段:

class Confirmation extends Component{
saveAndContinue = (e) => {
    e.preventDefault();

    console.log("props : " + JSON.stringify(this.props.values));
    var form_id = Math.floor(Math.random() * 1000000); 
    let headers = new Headers();

      headers.append('Content-Type', 'application/json');
      headers.append('Accept', 'application/json');

      headers.append('Access-Control-Allow-Origin', '*');

    fetch("http://localhost:8002/sharepoint/big_data_poc/" + form_id,{
        method:'POST',
        //mode: 'cors',
        body:JSON.stringify(this.props.values),
        headers: headers
    }).then(res => res.json()).then(this.setState({confirmation_id:form_id}))
    .then(response => console.log('Success:', JSON.stringify(response)))
    .catch(error => console.error('Error:', error));
    this.props.nextStep();
}

另外,我在nodeJShtml" target="_blank">服务器响应头中添加了access-control-allog-orgin

cb_service.prototype.addForm = function(req,res,form_id, doc_type,payload){
logger.info(JSON.stringify(payload));
bucket.upsert(form_id,payload,function(err,result){
    if(err){
        logger.error("error inserting data in couchbase")
    }
    else {
        res.setHeader('Access-Control-Allow-Origin','*')
        res.setHeader('Access-Control-Allow-Methods','POST, GET, OPTIONS, PUT')
        res.setHeader('mode','cors')
        logger.info("successful inserts");
        res.status(200);

        return res.json({"success":"ok"});       
    }
 })
}

我根本没有看到任何请求进入服务器。我只是在浏览器控制台中看到以下错误:

未能加载http://localhost:8002/sharepoint/big_data_poc/944960:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。因此,不允许访问源'http://localhost:3000'。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”,以便在禁用CORS的情况下获取资源。

任何帮助都是非常感谢的!!我想我已经做了SO上类似问题推荐的所有事情。甚至Safari也会抛出以下错误:

[错误]未能加载资源:来源http://localhost:3000不被Access-Control-Allog-Origin允许。(408661,第0行)

[错误]获取API无法加载http://localhost:8002/sharepoint/big_data_poc/408661.Access-Control-Allog-Origin不允许Origin http://localhost:3000。

太感谢了!

共有1个答案

堵存
2023-03-14

安装cors就不会有任何问题const cors=require('cors');app.use(cors());npm https://www.npmjs.com/package/cors上的链接

 类似资料:
  • 我正在尝试获取一个新闻网站的提要。我想我应该使用Google的feed API将feedburner提要转换为JSON。下面的url将以json格式从提要返回10个帖子。http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/Mathrubhumi 我使用下面的代码来

  • 问题内容: 我想访问来自同一域但端口号不同的信息,为此,我添加了响应头。 Servlet代码:( 显示在www.example.com:PORT_NUMBER上) jQuery代码:( 显示在www.example.com上) 几次我收到此错误(在控制台中): 该错误通常在执行时首次发生。第二次允许。 我的问题是代码中或代码中缺少什么? 任何建议将不胜感激。 更新1 我变了: 至: 然后我在控制台

  • 我在前端使用Angular,在后端使用Java Spring,但是我得到了错误:,而我确信CORS是启用的。这是我的配置文件: 它工作了,我可以毫无问题地完成所有其他请求,但服务中的这个PUT请求给了我一个错误: 这是我的服务器端:

  • 问题 我设法从我的应用程序进入keycloak登录页面。使用“我的登录详细信息”登录后,出现错误: -localhost/:1 CORS策略阻止了从源“http://localhost:4200”访问“https://localhost:8080/auth/realms/pwe-realm/protocol/openid-connect/token”的XMLHttpRequest:请求的资源上没有

  • 问题内容: 到目前为止,我想出了下面的代码,它是读取xml的非常基本的代码,但是出现以下错误。 XMLHttpRequest无法加载****。所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访问源’ http://run.jsbin.com ‘。 我没有发现我的代码有什么问题,所以我希望有人可以指出我的代码有什么问题以及如何解决。 问题答案: 由于

  • 问题内容: 我需要通过JavaScript 将数据发送到Python服务器。因为我使用的是localhost,所以我需要使用CORS。我正在使用Flask框架及其模块。 作为JavaScript,我有这个: 和Python代码: 但是当我执行它时,我收到以下消息: 我该如何解决?我知道我需要使用一些“ Access-Control-Allow-Origin”标头,但我不知道如何在此代码中实现它。顺