我在客户端和Asp.net Core Web Api服务器端都有一个应用程序(在Vuejs中)+ axios。 我添加了jwt令牌身份验证。我已将服务器配置为在令牌过期时添加自定义标头。 (响应中有“令牌已过期”标头)。
axios拦截器的error.response.headers对象中不存在标头“令牌已过期” ...(注意:这很令人沮丧,因为标头存在于Postman上,而与axios无关)。
编辑:github上的这个问题与我的案例https://github.com/axios/axios/issues/606
相似答案 0 :(得分:1)
默认情况下,浏览器不会将所有响应标头公开给应用程序。有关更多信息,请参见W3C Cross-Origin Resource Sharing (Terminology): Simple Response Header。
默认情况下可用的响应头是:
更多一般信息:https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2
要使其他标头可用于该应用程序,请在启动时配置中调用WithExposedHeaders方法。
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
// ...
app.UseCors(builder =>
{
builder.WithOrigins("http://localhost:8080");
builder.AllowAnyHeader();
builder.WithExposedHeaders("Token-Expired");
builder.AllowAnyMethod();
builder.AllowCredentials();
builder.Build();
});
}
注意:您必须设置一个特定的原点(而不添加AllowAnyOrigin()方法)。 实际上,CORS规范还指出,如果存在Access-Control-Allow-Credentials标头,则将原点设置为“ *”(所有原点)是无效的。
Etvoilà:)