我正在尝试从HP Alm的REST API获取一些数据。使用一个小的curl脚本可以很好地工作 - 我得到了我的数据。
现在,用JavaScript、fetch和ES6(或多或少)似乎是一个更大的问题。我一直收到这个错误消息:
Fetch API无法加载。响应预检请求未通过访问控制检查:所请求的资源上不存在“Access-Control-Allow-Origin”头部。因此,禁止访问来源“http://127.0.0.1:3000”。响应具有HTTP状态代码501。如果不透明的响应符合您的需求,请将请求模式设置为'no-cors'以禁用CORS获取资源。
我理解这是因为我试图从我的localhost获取数据,解决方案应该是使用跨源资源共享(CORS)。我认为我实际上已经这样做了,但不知何故它要么忽略我在标题中写的内容,要么问题出在其他地方。
那么,这是实现问题吗?我做错了吗?不幸的是,我不能检查服务器日志。我真的有点卡住了。
function performSignIn() {
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
headers.append('Access-Control-Allow-Origin', 'http://localhost:3000');
headers.append('Access-Control-Allow-Credentials', 'true');
headers.append('GET', 'POST', 'OPTIONS');
headers.append('Authorization', 'Basic ' + base64.encode(username + ":" + password));
fetch(sign_in, {
//mode: 'no-cors',
credentials: 'include',
method: 'POST',
headers: headers
})
.then(response => response.json())
.then(json => console.log(json))
.catch(error => console.log('Authorization failed : ' + error.message));
}
我正在使用Chrome浏览器。 我尝试了使用Chrome CORS插件,但是我收到了另一个错误消息:
响应中的“Access-Control-Allow-Origin”标头的值在请求的凭据模式为“include”时不能为通配符“*”。因此,来自“http://127.0.0.1:3000”的来源不被允许访问。由XMLHttpRequest启动的请求的凭据模式由withCredentials属性控制。

Content-Type和Access-Control-Allow-Origin头文件来解决了这个问题 - 谢谢! - Morvaelhttps://cors-anywhere.herokuapp.com/现在不能再使用了。客户端将会收到一个403 Forbidden错误 - 除非开发者明确请求临时通过。这是官方公告:https://github.com/Rob--W/cors-anywhere/issues/301。我建议从回答中直接删除`cors-anywhere`的相关内容,因为它已经没有用处了。 - Boghyon Hoffmann