Angular http post不发送头文件

时间:2017-06-12 18:07:12

标签: angular angular2-routing angular-http

  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中的附加请求。 enter image description here

2 个答案:

答案 0 :(得分:2)

您附加的图片是OPTION请求,您的标题将显示在POST请求中。

一旦选项请求被授权,之后您的发布请求将被发出。

问题是您正在进行的请求是未经授权的,请从服务器端检查代码,这不是角度问题,代码是好的。

它会起作用。

答案 1 :(得分:1)

@Vivek的回答是正确的。

请允许我详细介绍一下细节,以便更好地了解正在发生的事情:

浏览器使用OPTIONS http动词执行预检请求,这是XHR对象发出的另一个请求,以确保允许它实际发出请求。

除非您设置自定义标头,否则没有预检,在设置这些预检时,与授权标头一样,将执行OPTIONS请求。这个不包括@Vivek在他的回复中指定的那些海关标题。一旦弄清楚为什么您的端点没有响应预检请求,并且该请求成功,您将看到具有基本身份验证凭据值的Authorization标头。

这是一个jsfiddle,我向虚拟api发出请求,所以你看到它在预检请求成功后有效。请参阅app.ts

中的代码

Here您可以阅读有关该预检请求的更多信息。

查看chrome的网络监视器:

enter image description here

所以,只要解决你的api资源有什么问题,那么就像@Vivek提到的那样,你的能力应该可以正常工作。