我有一个Grunt进程,它启动了express.js服务器的实例.刚刚开始提供空白页面,并且Chrome中的开发人员控制台的错误日志中出现以下内容(最新版本),这一点工作非常精细:
XMLHttpRequest无法加载https://www.example.com/ 请求的资源上没有"Access-Control-Allow-Origin"标头.因此不允许来源" http:// localhost:4300 "访问.
什么阻止我访问该页面?
我从node.js服务器获取数据时遇到问题.
客户端是:
public getTestLines() : Observable<TestLine[]> {
let headers = new Headers({ 'Access-Control-Allow-Origin': '*' });
let options = new RequestOptions({ headers: headers });
return this.http.get('http://localhost:3003/get_testlines', options)
.map((res:Response) => res.json())
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
Run Code Online (Sandbox Code Playgroud)
在服务器端我也设置了标题:
resp.setHeader('Access-Control-Allow-Origin','*')
resp.send(JSON.stringify(results))
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误
"XMLHttpRequest无法加载http:// localhost:3003/get_testlines.对预检请求的响应未通过访问控制检查:请求的资源上没有'Access-Control-Allow-Origin'标头.来源' http://因此不允许localhost:3000 '访问."
我该如何解决?当我删除标题时,它表示此标题是必需的.
我有单独的restfull网络服务。我在我的前端项目中使用 Angular 6。当我使用 httpClient 发布数据时,出现这样的错误
error => cors header 'access-control-allow-origin' missing
Run Code Online (Sandbox Code Playgroud)
这是我的角度代码:
login(username:string , password:string){
var param = "username=" +username + "&password=" + password ;
return this.http.post("http://localhost:8080/login",param);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将webUntis'(docs)API用于学校项目.现在我只想尝试与API建立任何类型的连接.
var result;
const url = 'https://api.webuntis.dk/api/status';
var xhr = new XMLHttpRequest();
xhr.open('GET',url, true);
xhr.setRequestHeader('Access-Control-Allow-Origin','*');
xhr.setRequestHeader('Content-type','application/json');
xhr.setRequestHeader('Access-Control-Allow-Methods','GET');
xhr.setRequestHeader('X-API-KEY', '/*API KEY*/');
xhr.send();
xhr.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
result = xhr.responseType;
console.log(result);
}
};
Run Code Online (Sandbox Code Playgroud)
此代码生成以下错误消息:
Cross-Origin请求被阻止:相同的源策略禁止在https://api.webuntis.dk/api/status上读取外部资源 (原因:缺少CORS Header'Access-Control-Allow-Origin').
怎么可以解决这个问题?也许我的API密钥错了?
免责声明:错误消息是从德语翻译的.
我试图像这样从我的本地主机获取数据:
import { Injectable } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class SearchServiceService {
apiRoot:string = 'https://itunes.apple.com/search';
results:Object[];
loading:boolean;
constructor(private http:HttpClient) {
this.results = [];
this.loading = false;
}
search(term:string){
let promise = new Promise((resolve, reject) => {
let apiURL = `${this.apiRoot}?term=${term}&media=music&limit=20`;
this.http.get(apiURL).toPromise().then(res => {
// console.log( res.json() );
resolve();
}, function(error){
console.log('error is', error);
})
});
return promise;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用Chrome浏览器。为了防止出现此CORS问题,我使用此扩展名:
https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi/related?hl=en-US
但是仍然出现错误为:
Failed to load https://itunes.apple.com/search?term=Moo&media=music&limit=20: …Run Code Online (Sandbox Code Playgroud)