ReactJS和Java:对预检请求的响应未通过访问控制检查

时间:2019-08-16 14:55:26

标签: java reactjs cors

我正在使用axios从Java后端获取数据,由于cors问题,该操作失败了(请查看所附的屏幕截图)。我注意到的一件事是,如果我将axios文件中的AuthToken部分注释掉,它可以正常工作并给出状态200,并且如果我保留AuthToken,则可以消除错误的原因。不太确定问题是在Java代码中还是在axios.js文件中缺少。任何帮助将不胜感激。预先感谢。

  

axios.js

import axios from "axios";

const instance = axios.create({
  baseURL: "https://abc.domain.com"
});

instance.defaults.headers.common["AuthToken"] =
"myAuthToken";

export default instance;
  

.java文件中的标题

 response.addHeader("Access-Control-Allow-Origin", "*");
 response.addHeader("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE");
 response.addHeader("Access-Control-Allow-Headers", "Content-Type, AuthToken");
 response.addHeader("Content-Type", "application/json");
 response.addHeader("Accept", "application/json");

Cors error screenshot

2 个答案:

答案 0 :(得分:0)

错误是自我解释

  

没有Access-Controll-Allow-Origin标头

您还有其他标头,但不是。

  

我注意到的一件事是,如果我注释掉AuthToken部分,   axios文件,它工作正常,并提供状态200,如果我保留   AuthToken,

这是因为纯GET被认为是“简单请求”,不适用于CORS限制。当您向请求中添加其他标头时,它就不再简单了,CORS也将启动。

有关简单请求的更多详细信息,请参见https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Simple_requests

答案 1 :(得分:0)

您将要查看这篇文章:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

  

对于没有凭据的请求,可以将字面值“ *”指定为通配符;该值告诉浏览器允许从任何来源请求代码来访问资源。尝试将通配符与凭据一起使用将导致错误。

如您所见,您正在传递具有 凭据的请求。这就是为什么当您省略令牌时,它起作用的原因,但是当您重新添加令牌时,它却无效。解决方案是在Java端显式指定域,而不是使用*