【发布时间】:2020-07-07 15:51:43
【问题描述】:
我正在尝试使用基本身份验证在ReactJS 上fetch 一个API(这是一个复杂的请求)。
我偶然发现了很多文章,大多数都建议在node 上修改一些内容,但在这里,在这种情况下,我没有使用任何节点服务器。我已经注释掉了所有NodeJS 代码,我直接从componentDidMount() 获取这个API,显然ReactJS 有它自己的后端服务器。我目前正在使用第三方 cors chrome 插件,但我反对使用第三方代理服务器,如 Heroku 或 NGINX 或第三方库,如 axios。 Cors chrome 插件帮助我解决了access-control-allow-origin 问题,但随后又引发了这个新问题。
Access to fetch at 'https://server-iam-fetching/' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
我尝试了一些方法,例如在标题上附加访问控制检查,但似乎都没有。这是我的示例代码:
let headers = new Headers();
headers.append("Access-Control-Request-Headers", "*")
headers.append('Authorization','Basic ' + btoa(username + ":" + password));
credentials
allow requests
allow origins
..
..
etc
const someRequest = new Request(url, {
method: 'GET',
headers:headers,
mode:'cors',
cache: 'default'
});
componentDidMount(){
fetch(someRequest)
.then(response => response.json())
.then(json => console.log(json))
}
如有任何问题,请随时发表评论。我在 MacOS 上。另外,我不想禁用我的 chrome 网络安全。
【问题讨论】:
-
@AmerllicA 我在 MacOS 上
-
你有这个问题只是在开发模式下?生产模式和启动时运行是否存在 CORS 错误?
-
是的,我处于开发模式,一旦我启动它就会看到这个问题。
-
我会发布一个仅用于开发的答案,但这不是最终答案。如果它是有用的只是答案。
-
删除
headers.append("Access-Control-Request-Headers", "*")。它自己的那个不会使事情正常进行,但它是错误的,它没有帮助。您不能在 JavaScript 代码中手动设置该标头。浏览器控制该标题。
标签: javascript node.js reactjs security cors