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

CORS阻塞带有'Authorization'头和数据的axios请求

仲绍晖
2023-03-14

试图将axios post请求从Vue应用程序(localhost)发送到我的nodejs API(localhost和heroku)。
如果请求是在没有数据或头的情况下发送的,则接收响应不会有问题,但是当我添加它们时,我会收到以下错误:

Access to XMLHttpRequest at 'https://myapp.herokuapp.com/myendpoint' from origin 'http://localhost:8080'
has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No
'Access-Control-Allow-Origin' header is present on the requested resource.

我已经尝试了不同的选择,服务器端和客户端,建议类似的问题,但没有成功。

客户端请求:

        const apiUrl = 'https://myapp.herokuapp.com/myendpoint'
        //const apiUrl = 'http://localhost:5000/myendpoint'
        
        const token = Buffer.from(`${this.userid}:${this.password}`).toString('base64')
        const data = {
          'mydata': 'some data'
        }

        axios.post(apiUrl, data, {
          headers: {
            Authorization: "Basic " + token 
          }
        }).then( res => {
          console.log(res)
        }).catch( err => {
          console.log(err)
        })

服务器endpoint:

app.post("/myendpoint", (req, res) => {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "*");
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

    res.send('This is the API\'s response')    
})

我尝试了一些答案:
对预飞行请求的响应没有通过访问控制检查
Nodejs Express CORS问题的'access-control-allow-origin'
https://www.moesif.com/blog/technical/CORS/authoritial-guide-to-cors-cross-origin-resource-sharing-for-rest-apis/
使用axios时CORS授权问题
如何使用axios发送授权头

共有1个答案

乜栋
2023-03-14

我认为使用全局中间件定义cors会更好。首先,使用npm i cors安装cors

然后,我将展示一个如何使用该包的示例。

const express = require('express');
const cors = require('cors');

const app = express();

app.use(cors());

// your routes and things here...

然后,确保前端还在Axios请求中使用设置为truewithCredentials。这样做是为了确保正确发送报头。

axios.post(apiUrl, data, {
  headers: {
    Authorization: "Basic " + token 
  },
  withCredentials: true,
}).then(() => ...);

有时,如果手动定义access-control-*,可能会忘记一些东西。这就是为什么我建议您使用cors

 类似资料:
  • 我正在开发一个Chrome扩展,从某些网站向API I控件提出请求。直到Chrome 73,这个扩展都能正常工作。升级到Chrome 73后,我开始得到以下错误: 跨源读取阻塞(CORB)阻塞的跨源响应http://localhost:3000/api/users/1,其MIME类型为application/json 根据Chrome's关于CORB的文档,如果以下所有情况均为真,CORB将阻止对

  • 问题内容: 我有一个简单的PHP脚本,正在尝试跨域CORS请求: 但是我仍然得到错误: 请求标头字段不允许 我有什么想念的吗? 问题答案: 不允许作为可接受的值,请参阅此处的Mozilla文档。 您应该发送可接受的标头(而不是如星号所示)而不是星号。

  • 我有一个PHP脚本,它成功地返回一些简单的头以及一个set-cookie头,如果在浏览器中直接调用(或由邮递员)。我可以从chrome DevTools上读到这样的响应标题。但是当我用Axios调用它时,set-cookie头就不会显示出来,浏览器中也没有保存cookie。 我尝试了不同的方法,比如在服务器端更改响应头,并在axios中使用“with Credentials:true”,但都不起作

  • 您好,我想使用截取标题和正文参数向服务器发送删除请求。但我无法成功发送请求 我试过的 这是我的截击请求课 当我尝试此代码时,我收到400响应代码错误。如果有人可以帮助我,请告诉我。。这就是我做错的地方。谢谢 这里是我测试的deleteapi的屏幕截图,它工作正常。

  • 我正试图通过Axios从Azure AD获取一个包含表单数据的post请求的图形令牌。响应抛出错误请求失败,状态代码为404。下面是代码, 邮寄请求在邮递员中工作正常。如果从Axios请求中删除了body FormData,则Axios中的响应也符合预期。当body FormData添加到请求时,我遇到一个错误。 AXIOS错误:请求失败,状态代码404