【发布时间】:2021-02-25 15:15:04
【问题描述】:
我正在使用 Angular 9。我有这些请求来获取二进制图像数据...
headersMultiPartForm = new HttpHeaders().set('Content-Type', 'multipart/form-data');
...
getImage(id) {
let api = `${this.endpoint}/person-library-image?id=${id}`;
return this.http
.get(api, {headers: this.headersMultiPartForm, responseType: "blob"})
.pipe(retry(this.retry), catchError(this.handleError));
}
...
results.forEach(( componentarray, key ) => {
...
this.myService.getImage(id).subscribe(data => {
...
this.createImageFromBlob(data, index);
...
}, () => {
...
});
});
我注意到请求需要一段时间才能完成,这似乎是因为它们被阻止等待 OPTIONS 请求完成。我想阻止发送这些预检 OPTIONS 请求。我认为我的“multipart/form-data”会阻止预检请求,但显然不是......
当我通过右键单击并复制为 CURL 检查实际请求时,我看到...
curl 'http://localhost:7071/api/person-library-image?id=127' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:81.0) Gecko/20100101 Firefox/81.0' -H 'Accept: application/json, text/plain, */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: http://localhost:4200/picture-library' -H 'Content-Type: multipart/form-data' -H 'Authorization: JWT <token>' -H 'Origin: http://localhost:4200' -H 'Connection: keep-alive' -H 'Pragma: no-cache' -H 'Cache-Control: no-cache'
我有一个拦截器添加了 Authorization 标头,但我不知道其他标头来自哪里。有什么想法可以关闭它们以防止这些预检 OPTIONS 请求吗?
【问题讨论】:
-
我尝试按照建议添加额外的“Access-Control-Max-Age: 600”标头,但继续发送 OPTIONS 请求。
-
Content-Type: multipart/form-data应该是simple request,不需要预检;您的请求是否还有其他内容(例如由拦截器添加)将其排除在该类别之外?
标签: angular http-headers options angular-httpclient preflight