无法使用 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 错误 [重复]

angular2 spring boot 跨域 cors

Laravel Angular CORS问题

Angular / .NET Core 项目上的 Cors 问题

Angular cors 从 django rest 框架后端获取数据并获得许可