无法使用 cors 从 angular 2 获取所有响应标头
Posted
技术标签:
【中文标题】无法使用 cors 从 angular 2 获取所有响应标头【英文标题】:Can't get all response headers from angular 2 with cors 【发布时间】:2017-03-21 03:44:50 【问题描述】:我有一个 Angular 2 (2.1.2
) 客户端,ASP.NET Core 作为启用 CORS 的后端。普通 API(GET、POST、DELETE、...)工作正常,我的问题是当我尝试从响应中检索标头时;特别是Content-Disposition
。这是我尝试使用 Ajax 获取文件内容时的屏幕截图。
如您所见,在 GET 响应标头中有一个名为 Content-Disposition
的标头,但是当我尝试从 Angular http
服务中检索它时,它却不见了。
快速说明,我只在开发中使用 CORS。
【问题讨论】:
您的服务器可能丢失了Access-Control-Allow-Headers:content-disposition
w3.org/TR/2014/REC-cors-20140116/…
我还是 ASP.NET Core 的新手,但是我已经像 options.AddPolicy("AllowAll", builder => builder.AllowAnyMethod().AllowAnyHeader().AllowAnyOrigin())
这样启用了 CORS,我不确定我是否遗漏了什么。
不包括AllowAnyHeaders
。我不知道 ASP.NET,我只知道 Angular2。
我强制在每个回复中添加Access-Control-Allow-Headers:"Content-Disposition"
,但仍然没有运气。
Ups,应该是access-control-expose-headers
。
【参考方案1】:
您需要配置服务器以便它添加响应标头
access-control-expose-headers: content-disposition
否则浏览器不会使标头对 javascript 可用。
【讨论】:
搜索 CORS 谢谢,我找到了对所有 CORS 标头的良好描述 - developer.mozilla.org/en-US/docs/Web/HTTP/…【参考方案2】:更准确地说,在 ASP.NET Core 中,您可以在 Startup
类中的 Configure
方法中像这样配置它:
app.UseCors(x =>
x.WithExposedHeaders("Content-Disposition");
// .. omitted
);
【讨论】:
以上是关于无法使用 cors 从 angular 2 获取所有响应标头的主要内容,如果未能解决你的问题,请参考以下文章
CORS 在 chrome 中无法与 Angular 2 一起使用
从 Github 获取贡献的 SVG 图像会在使用 Angular 创建的网站中引发 CORS 错误 [重复]