1. Angular не будет редиректить. Он так не работает. Он использует XmlHttpRequest под капотом, а XHR работает так в вашем случае: выполняет запрос -> получает редирект от сервера -> идёт по адресу редиректа -> достаёт по этому адресу полученный ответ и возвращает ангуляру. А ангуляр пытается распарсить полученный ответ. И ожидает при этом получить JSON, но получает при этом HTML, поэтому выдаёт ошибку
2. this.httpService.postData(JSON.stringify(this.user)). Тут не совсем понятно зачем юзер превращается в строку и затем строка постится. Обычно постится сразу JSON объект. Если только там не какая-то дикая дичь на сервере. Но лучше решить вопрос путём поста JSON объекта, а не строки. Меньше страдать прийдётся
Теперь по подводу редиректов на стороне сервера. SPA так не работают. Сервак не занимается редиректами. Это не его работа. Работа сервака вернуть JSON ответ и HTTP status 200 в случае если он может вернуть то что от него ждут. И ошибку в противном случае. Вот тут подробнее
https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Вобще, если хотите, не сильно расстраиваться из-за дурацкого Ангуляра (да и любого другого SPA фреймворка), то желательно ознакомиться и начать использовать oAuth или JWT.
Если вы дочитали до этого момента и сказали "ну тебя в баню со своими советами, я хочу чтоб редиректило как у нормальных пацанов", то можете сделать это вот так:
import { tap } from 'rxjs/operators';
return this.http.post('/login', user, {observe: 'response', responseType: 'text'}).pipe(
tap(response => {
location.href = response.url;
})
);