Angular 5 - Headers 未发送

Angular 5 - Headers not being sent

我有这个...

 import { HttpClient } from '@angular/common/http';
 import { HttpHeaders } from '@angular/common/http';
 import { Injectable } from '@angular/core';
 import { Observable } from 'rxjs/Observable';
 import { ReqLogin, ResLogin, ResList, ResEmpty} from 
 '../../interfaces/general';
 import { GlobalService} from '../global/global.service';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/do';


 ...


list(): Observable<ResList> {
const url = this.gs.backendServer + this.gs.backend.endpoints.list;
const httpOptions = {
  headers: new HttpHeaders({
    'Authorization': this.gs.token
  })
};
console.log(httpOptions);
console.log(this.gs.token);
return this.http.get(url, httpOptions)
  .map(res => <ResList> res)
  .do(dataReceived => console.log(dataReceived));
}

控制台结果:

HttpHeaders
headers:
Map(1)
size:(...)
:Map
[[Entries]]:Array(1)0:
{"authorization" => Array(1)}
key:
"authorization"
value:["wWTq3NP5LzynzTzYEcHUWgzBC5ioJ1DVW6WDR3QgIDAnc9yrDuVR92iyOQVgooGQ"]
length:1

wWTq3NP5LzynzTzYEcHUWgzBC5ioJ1DVW6WDR3QgIDAnc9yrDuVR92iyOQVgooGQ

因此,授权确实按预期进入了选项。

但是当我看到请求时...headers 不存在...

OPTIONS /list HTTP/1.1
Host: localhost:4600
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:4200
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Access-Control-Request-Headers: authorization
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,pt;q=0.8

问题是:怎么了?

编辑:代码没有错。我只是发现这是后端服务器试图处理 OPTIONS 请求的授权

尝试设置 HttpHeaders 而不是传递对象:

list(): Observable<ResList> {
  const url = this.gs.backendServer + this.gs.backend.endpoints.list;
  let httpOptions = new HttpHeaders()
                         .set('Authorization', this.gs.token);

  return this.http.get(url, { headers: httpOptions })
    .map(res => <ResList> res)
    .do(dataReceived => console.log(dataReceived));
}
let header = new HttpHeaders();
    header = header.append('Authorization', this.gs.token);

const httpOptions ={ headers:header};

您可以尝试更改 headers 的创建方式吗

在服务器端,当您执行 CORS 时,您需要为 "preflight" 的 header 选项添加以下内容 * *CORS*

if (req.method === "OPTIONS") {
    res.sendStatus(200);
} else {
    next();
}

我在选项方面遇到了同样的问题,为此浪费了将近一天的时间,现在我不会忘记它。