Angular http post 未发送 headers

Angular http post not sending headers

  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);

  }

我正尝试将 headers 与我的 post 请求一起发送,但我无法在我的请求中找到任何 headers。上面的代码哪里可能出错。 下面是 chrome 中的附加请求。

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

选项请求获得授权后,您的 post 请求将被执行。

问题是您发出的请求未经授权,请检查服务器端的代码,这不是 angular 的问题,代码很好。

它会起作用。

@Vivek 的回复是正确的。

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

浏览器使用 OPTIONS http 动词执行预检请求,这是 XHR object 发出的额外请求,以确保允许实际发出请求。

没有预检,除非您设置自定义 headers,当设置这些时,就像您对授权 header 所做的那样,将执行 OPTIONS 请求。这不包括@Vivek 在他的回复中指定的那些习俗 headers。一旦你弄清楚为什么你的端点没有响应预检请求,并且该请求成功,你将看到授权 header 和你的基本身份验证凭据值。

这是一个 jsfiddle,我在这里向虚拟 api 发出请求,因此您会看到它在预检请求成功后起作用。请参阅 app.ts

中的代码

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

查看chrome的网络监视器:

所以,只需修复您的 api 资源的任何问题,然后您就可以像@Vivek 提到的那样正常工作。