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

尝试使用Axios向API发送POST请求时,响应中的“访问控制允许凭据”标头为“”

曹昊焱
2023-03-14

我有一个react应用程序在localhost:3000上运行,localhost:8000上有一个nodeJS express服务器,我需要向jsreport API发送POST请求,但当我尝试发送请求时,出现以下错误:

访问位于“”的XMLHttpRequesthttp://localhost:5488/api/report“起源”http://localhost:3000'已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:响应中的'access control Allow Credentials'标头的值为',当请求的凭据模式为'include'时,该值必须为'true'。XMLHttpRequest启动的请求的凭据模式由withCredentials属性控制。

后请求:

axios.defaults.withCredentials = true;

axios.post('http://localhost:5488/api/report',
{withCredentials: true, crossorigin: true},
{
  "template": {
    "content": "<h1>Hello {{foo}}</h1>",
    "engine": "handlebars",
    "recipe": "chrome-pdf"
  },
  "data": {
    "foo": "world"
  }
}).then((response)=> {
  fs.writeFileSync('/reports/report.pdf', response.content)
}).catch(function (error) {
  console.log('AXIOS error: '+ error);
  return 'errorReport'
})

Server.js:

var corsOptions = {
  origin: 'http://localhost:3000',
  credentials : true
 }
app.use(cors(corsOptions));
app.use((req, res, next) => {
  res.header('Access-Control-Expose-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  res.header("Access-Control-Allow-Origin", "http://localhost:3000");
  res.header("Access-Control-Allow-Credentials", true);
  res.header("Access-Control-Allow-Methods", "GET,PUT,POST,DELETE");
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  const err = new Error('Not Found');
  err.status = 404;
  next(err);
})

我不明白如果我在axios中使用.withCredentials并在服务器中建立了标头和cors配置,为什么凭据是空的。

共有3个答案

司徒泰
2023-03-14

我已经摆弄了一段时间的持久用户会话,在将passport/passport-local(用于身份验证)、mongoose、express-sessionconnect-mongo(用于在mongo中存储会话)串在一起时遇到了问题。

@mshibl comment帮助我更进一步,为express设置这些cors选项,最终使cookies被正确传递。希望这能帮助其他有类似问题的人

app.use(cors({
  credentials: true,
  origin: "http://localhost:3000"
}));
包兴思
2023-03-14

更新Server.js如下

var corsOptions = {
  origin: 'http://localhost:3000',
  credentials : true
 }

app.use(cors(corsOptions));

app.use(function (req, res, next) {	
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');    
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');    
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');   
    res.setHeader('Access-Control-Allow-Credentials', true);    
    next();
});
慕迪
2023-03-14

我使用了下一个代码而不是axios请求,它起作用了:

fetch('http://localhost:5488/api/report', {
  method: 'POST',
  body: JSON.stringify(data),
  headers:{
    'Content-Type': 'application/json'
  },
  credentials: "same-origin",
}

将凭据设置为“同一来源”修复了这个问题,但由于我想使用jsreport,我找到了一个包,使这一过程更容易,而无需使用fetch或axios。

import jsreport from 'jsreport-browser-client-dist'
jsreport.serverUrl = 'http://localhost:5488'
jsreport.render(document.getElementById('reportPlaceholder'), data)

使用jsReport方法,我可以在反应组件中显示我的报告

<div id="reportPlaceholder">
      <p>there should be a report here...</p>
</div>
 类似资料:
  • 我正在从主机(http://abc.com.au)向主机http://localhost:8081上运行的Spring Cloud API网关发送ajax请求。 jquery AJAX请求代码。 SimplifiedAdoptionBulkUpload.jsp spring cloud gateway cors配置。 我在chrome控制台中遇到以下错误。 SimplifiedAdoptionBu

  • 我正在尝试向RESTAPI发送评论。rest API已经为我的应用程序地址设置了CORS。。 后端 但我得到了 加载失败http://localhost:8999/api/comment: 对飞行前请求的响应未通过访问控制检查:响应中“访问控制允许凭据”标头的值为“”,当请求的凭据模式为“包括”时,该值必须为“真”。起源'http://localhost:8000因此,不允许访问。XMLHttpR

  • 一、 am在angular 6和asp.net内核上使用信号器功能。但对飞行前请求继续获取此错误响应未通过访问控制检查:响应中“访问控制允许凭据”标头的值为“”,当请求的凭据模式为“包括”时,该值必须为“真”。 做了一些研究,发现这是服务器端的CORS问题。所以修改了服务器代码。 startup.cs 角度应用程序 参考资料 访问控制允许原点-角度5 响应中的访问-控制-允许-凭据标题为"这必须是

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

  • 在制作MMORPG项目的过程中,我正在学习服务器-客户端通信。 *更新:服务器端代码已编辑。 这是服务器端代码。 这是客户端代码 当调用login()函数时,finch()函数将此消息抛出到浏览器控制台。(http://localhost:4000/login)是服务器端,(http://localhost:8000)是客户端。 我尝试了许多不同的方法来修复它,但没有得到好的结果。

  • 我正在创建一个单页应用程序使用sails.js和reactjs,并使用JWT作为受保护请求的身份验证。在登录过程中,登录请求按预期工作,并能够成功登录。之后,当我试图用无记名请求其他请求时,浏览器显示以下错误消息。 从源访问位于“http://localhost:1337/monitoring URL”的XMLHttpRequest 以下是我在帆config/security.js中的cors设置