如何向针对跨域API的OPTIONS
请求添加标头?
我正在使用的API需要在所有请求中将JWT标记设置为Authorization
标头。
当我尝试访问API Angular时,首先执行OPTIONS
请求,该请求不关心我为“真实”请求设置的标头,如下所示:
this._headers = new Headers({
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': 'Bearer my-token-here'
});
return this._http
.post(AppConfig.apiUrl + 'auth/logout', params, {headers: this._headers})
...
...
如果未提供令牌,则API返回HTTP状态401,Angular认为OPTIONS
请求失败。
答案 0 :(得分:22)
根据CORS specification when a preflight request执行的用户凭据被排除在外。
(...)使用方法OPTIONS,并具有以下附加约束:
- (...)
- 排除作者请求标题。
- 排除用户凭据。
- (...)
(重点是我的)
考虑到这一点,问题似乎出现在API方面,应该接受OPTIONS
请求而不需要身份验证。
答案 1 :(得分:-1)
可以使用 withCredentials
选项为 CORS 预检请求提供身份验证:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor() {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
withCredentials: true
});
return next.handle(request);
}
}
另见: