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

对预检请求的响应不通过权限改造检查:请求的资源上不存在“访问控制允许起源”标头。

左丘照
2023-03-14

我使用nodejs服务器、express框架和fetch库将请求发送到另一个位于不同域的服务器。对于我的一个endpoint,请考虑(localhost:8080/login),当用户单击登录按钮时,我正在呈现ejs文件,我正在向另一个域中的不同服务器(https://otherserver.com/login)发送获取请求。我无法发送此请求。我收到此错误:

飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。原点'http://localhost:8080因此不允许访问。响应的HTTP状态代码为404。如果不透明的响应满足您的需求,请将请求的模式设置为“no cors”,以获取禁用cors的资源。

我不知道如何处理这个问题。请建议一些可以解决这个问题的想法或链接。

共有2个答案

郑衡
2023-03-14

我找到了我的问题的解决方案。我试图解释我所理解的,因为我是服务器端和 Web 开发的初学者。

这是我面临的问题:对于我的nodejs服务器中的一个endpoint,考虑(localhost:8080/login)当用户单击ejs文件中的登录按钮时,我正在呈现ejs文件,我正在向位于其他域中的不同服务器的API(https:other server . com/sign in)发送获取请求。我无法发送此请求。我遇到了cors问题。

发生Cors问题是因为呈现ejs文件的服务器域(我的nodejs服务器)和我在单击登录按钮后发出获取请求的另一个域(https:otherserver.com/signin)不同。

所以解决方案是:

我需要首先向同一域发出获取请求(我的nodejs服务器localhost:8080 / api/signin)。然后从这个服务器,我应该调用其他域的api(https:otherserver.com/signin)。通过这样做,我们不会遇到任何cors问题。因为客户端 ejs 文件正在请求呈现该文件的同一服务器。然后服务器绕过对另一台服务器的请求。

来自客户端javascript文件的代码/api/sign是本地nodejs服务器中的一个endpoint,您可以添加选项:

options ={
    method : 'POST',
    headers : {
         'Accept': 'application/json',
        'Content-Type': 'application/json'
       }

    body : JSON.stringify({
        email_address : emailId,
        password : pwd
    })
};

fetch("/api/signin",options)
.then(function(res) {
    console.log(res);
}).catch(function(error) {
   console.log(error); 
}); 

来自本地节点js服务器端的代码:

express.use('/api/', function (req, res, next) {
     var options = {
        method : req.method,
        headers :req.headers,
        body : JSON.stringify(req.body)
    }; 

    fetch('https://otherserver.com'+req.path,options)
    .then(response => {         
        return response.json();
    }, error => { console.error(error)})
    .then(function(json){
        res.send(json);
    })
    .catch(function(error) { 
       res.send(error); 
    });

})

希望这对服务器开发初学者有所帮助。

诸葛雨泽
2023-03-14

您可以在服务器上使用cors中间件。

最简单的使用方法是添加:

app.use(cors())

在所有路由处理程序之前。

 类似资料:
  • 我正在尝试将Laravel社交名流集成到我的项目中,我遇到了以下错误 在'访问XMLHttpRequesthttps://github.com/login/oauth/authorize?client_id=6b87b76a942a90caec24 问题是当我按使用 github 按钮登录时,出现上述错误 错误图片 科尔斯.php文件 am使用水果蛋糕/laravel-cors包 我哪里做错了?

  • 无法加载XMLHttpRequesthttp://xxx.xxx.对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。因此,不允许访问源“null”。响应的HTTP状态代码为500。 我试图用ajax发送一个xml肥皂,但给了我那个错误。我尝试了很多选项,但似乎都不起作用,这是代码: 我做错了什么?我发送了一个POST操作,但它将

  • 我是AWS的新手,所以请耐心等待我:( 我目前正在制作一个具有上传照片功能的Web应用程序。我想将这些照片保存在S3存储桶中,并在我的数据库中保存对它们的引用。我目前正在遵循本指南:http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html 但是,我已经完成了指南中所述的一

  • 我试着把数据从React.jslocalhostinsert.php文件。当我提交的形式从reactjs它给我错误的控制台错误是: 访问位于“”的XMLHttpRequesthttp://localhost/reactphpdemo/connect.php“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在'access

  • 问题内容: 我在使用ngResource调用Amazon Web Services上的REST API时遇到此错误: XMLHttpRequest无法加载 http://server.apiurl.com:8000/s/login?login=facebook。对预检请求的响应未通过访问控制检查:在所请求的资源上不存在“ Access-Control-Allow-Origin”标头。因此,不允许访

  • 我犯了这个错误 无法加载XMLHttpRequesthttp://domain.com/canvas/include/rs-plugin/js/extensions/revolution.extension.video.min.js.飞行前响应中的访问控制允许标头不允许请求标头字段X-Requested-With。 我的php页面顶部有这两行代码,用于加载这个js文件。 但是问题依然存在,我该怎么