我知道这里已经有很多相同的问题,
但不幸的是他们都没有帮助我:-(。。
这是我的问题:
我尝试从我的localhost连接到服务器上的REST服务。它适用于FF REST插件,但我的应用程序导致以下错误:
我如何尝试获取我想要的数据:
@Injectable()
export class ModelsComponent implements OnInit {
private restRoot = 'http://.../my_REST_Service';
private data;
constructor(private http: Http) { }
ngOnInit() {
this.getModels().subscribe(res => {
this.data = res;
console.log(this.data);
});
}
authHeaders() {
let username: string = 'xxxx';
let password: string = 'xxxx';
let token: string = btoa(username + ":" + password);
let headers: Headers = new Headers();
headers.append('Access-Control-Expose-Headers', 'Authorization');
headers.append('Authorization', 'Basic ' + token);
headers.append("Access-Control-Allow-Origin", "http://localhost:4200/");
headers.append("Access-Control-Allow-Methods", "*");
headers.append("Access-Control-Allow-Headers", "Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Connection,Content-Type,Cookie,DNT,Host,Keep-Alive,Origin,Referer,User-Agent,X-CSRF-Token,X-Requested-With");
headers.append("Access-Control-Allow-Credentials", "true");
return headers;
}
getModels(): Observable<any> {
return this.http.get(this.restRoot, {
headers: this.authHeaders(),
withCredentials: true <- from a similar issue
}).map(res => res.json());
}
}
我的服务器配置如下:
Header set Access-Control-Allow-Origin "http://localhost:4200"
Header set Access-Control-Allow-Headers "Accept,Accept-Charset,Accept-Encoding,Accept-Language,Authorization,Connection,Content-Type,Cookie,DNT,Host,Keep-Alive,Origin,Referer,User-Agent,X-CSRF-Token,X-Requested-With"
Header set Access-Control-Allow-Methods "*"
Header set Access-Control-Allow-Credentials "true"
Header set Access-Control-Expose-Headers "Authorization" <- from a similar issue
我知道还有其他相同/类似解决的问题。但我仍然不知道该做什么或怎么做。 如果有人可以帮我处理我的代码,我真的很感激!!
答案 0 :(得分:4)
浏览器在执行OPTIONS
之前会执行HttpGet
请求,您需要添加与HttpGet
具有相同路由的端点,并将其作为HttpOptions
请求,从该端点删除auth并从中返回200 OK
,这应该可以解决您的问题。
答案 1 :(得分:4)
&#34;我的服务器配置如下&#34; - 这大多是无关紧要的。查看错误消息:&#34;预检的响应具有无效的HTTP状态代码401&#34;
它没有提到您使用Access-Control-Allow-Thing提到的任何内容。
由于浏览器未获得发送原始请求的权限:它尚未发送用户名和密码。
您需要在服务器上找到执行授权的代码,并从该测试中排除OPTIONS请求。任何人都应该能够提出OPTIONS请求,而不仅仅是拥有用户名和密码的人。
答案 2 :(得分:1)
在服务器端,如果使用Node.js,您可以考虑授权所有OPTIONS请求,以便浏览器不需要身份验证来检查服务器/ REST API上授权的方法。
考虑以下代码:
if abs(prev - theta) < 20: