У меня есть одно приложение (в Vuejs) + axios на стороне клиента и на стороне сервера Asp.net Core Web Api. Я добавил аутентификацию токена jwt. Я настроил свой сервер, чтобы добавить пользовательский заголовок, когда токен истек. (В ответе был заголовок «Token-Expired»).
Заголовок «token-expired» не присутствовал в объекте error.response.headers от перехватчика axios ... (Примечание: это расстраивает, потому что заголовок присутствует в Postman, но не в axios).
Редактировать: этот вопрос на github кажется похожим на мой случай https://github.com/axios/axios/issues/606
По умолчанию браузер не предоставляет приложению все заголовки ответа.Для получения дополнительной информации см. Обмен ресурсами между источниками W3C (терминология): простой заголовок ответа .
Заголовки ответа, доступные по умолчанию:
Источник: https://docs.microsoft.com/en-us/aspnet/core/security/cors?view=aspnetcore-2.2#set-the-exposed-response-headers
Более общая информация: 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.
Et voilà:)