我知道这里已经有很多相同的解决问题,
但不幸的是,它们都没有帮助我:-(
这里是我的问题:
我尝试从本地主机连接到服务器上的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
我知道还有其他相同/相似的已解决问题。但是我仍然不知道该做什么或者怎么做。如果有人能帮我写代码,我会非常感激!!
在服务器端,如果使用Node.js,可以考虑授权所有选项请求,这样浏览器就不需要验证来检查哪些方法在server/REST API上被授权了。
考虑如下代码:
if (req.method === 'OPTIONS') {
res.status(200).end();
} else {
next();
}
浏览器在执行 HttpGet
之前执行 OPTIONS
请求,您需要添加一个与 HttpGet
具有相同路由的终结点,使其成为 HttpOptions
请求,从该终结点中删除身份验证并从中返回 200 OK
,这应该可以解决您的问题。
“我的服务器是这样配置的”-这基本上是无关紧要的。查看错误消息:“飞行前的响应具有无效的HTTP状态代码401”
它没有提到任何你提到的访问控制允许的东西。
由于浏览器尚未收到发出跨域请求的权限:它尚未发送用户名和密码。
您需要在服务器上找到执行授权的代码,并从该测试中排除选项请求。任何人都应该能够提出选项请求,而不仅仅是拥有用户名和密码的人。
我正在尝试使用Ajax进行REST调用(POST)。这是我的AJAX代码 最初,我得到了这个错误:XMLHttpRequest无法加载http://localhost:port/service/myservice。对preflight请求的响应未通过访问控制检查:请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTTP状态代码为4
我使用作为服务器端的Spring-boot并提供一个虚拟服务进行测试 其中我的serviceCaller.java=
问题内容: 我知道有很多这样的问题,但是我所见的问题都没有解决。我已经使用了至少3个微框架。所有这些都无法执行简单的POST,它应该将数据返回: angularJS客户端: SlimPHP服务器: 我已启用CORS,并且GET请求有效。html使用服务器发送的JSON内容进行更新。但是我得到了 XMLHttpRequest无法加载 http:// localhost:8080 / server.p
我知道有很多这样的问题,但我见过没有一个能解决我的问题。我已经使用了至少3个微框架。它们在执行一个简单的POST时都失败了,该POST应该返回数据: angularJS客户端: SlimPHP服务器: 我已经启用了CORS,并获得了工作请求。html使用服务器发送的JSON内容进行更新。然而我得到了一个 每次我试着用POST。为什么?
所有人。我是Angular 2和Spring框架的新手。我正在尝试一个带有授权头(基本身份验证)的简单get请求。 我使用的是Spring Boot(1.2.6.Release),这也可能是相关的。我的CORS配置如下所示。 帮帮我,我不知道我错过了什么...我已经查了很多帖子,但都没找到。
问题内容: 大家。我是Angular 2和Spring框架的新手。我正在尝试使用授权标头(基本auth)进行简单的get请求。 我正在使用Spring Boot(1.2.6.RELEASE),这也可能是相关的。我的CORS配置如下所示。 这是客户端的外观 我不断得到: XMLHttpRequest无法加载 http:// localhost:8080 / api / login?username