private handleError (error: any) {
// In some advance version we can include a remote logging of errors
let errMsg = (error.message) ? error.message :
error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // Right now we are logging to console itself
return Observable.throw(errMsg);
}
startCrawlJob(crawlvalues,username,password) {
let headers = new Headers({ 'Accept': 'application/json' });
headers.append('Authorization', 'Basic ' +
btoa(username+':'+password));
let options = new RequestOptions({ headers: headers });
return this.http
.post('http://localhost:8090/Crawler_p.html',crawlvalues, options).map(res =>
res.json()
).catch(this.handleError);
}
我正在尝试使用我的帖子请求发送标头,但我无法在我的请求中找到任何标头。在上面的代码中哪里可能是一个错误。 以下是chrome中的附加请求。
答案 0 :(得分:2)
您附加的图片是OPTION请求,您的标题将显示在POST请求中。
一旦选项请求被授权,之后您的发布请求将被发出。
问题是您正在进行的请求是未经授权的,请从服务器端检查代码,这不是角度问题,代码是好的。
它会起作用。
答案 1 :(得分:1)
@Vivek的回答是正确的。
请允许我详细介绍一下细节,以便更好地了解正在发生的事情:
浏览器使用OPTIONS http动词执行预检请求,这是XHR对象发出的另一个请求,以确保允许它实际发出请求。
除非您设置自定义标头,否则没有预检,在设置这些预检时,与授权标头一样,将执行OPTIONS请求。这个不包括@Vivek在他的回复中指定的那些海关标题。一旦弄清楚为什么您的端点没有响应预检请求,并且该请求成功,您将看到具有基本身份验证凭据值的Authorization标头。
这是一个jsfiddle,我向虚拟api发出请求,所以你看到它在预检请求成功后有效。请参阅app.ts
Here您可以阅读有关该预检请求的更多信息。
查看chrome的网络监视器:
所以,只要解决你的api资源有什么问题,那么就像@Vivek提到的那样,你的能力应该可以正常工作。