Почему ошибка HTTP 501 типа JSON представлена ​​в пользовательском интерфейсе как text/html вместо application/json?

У меня есть внешний Angular, работающий на Apache с внутренним Spring REST API на Tomcat.

Я хотел выдать ошибку 501 в некоторых случаях ошибки и хочу, чтобы этот ответ был представлен как JSON для пользовательского интерфейса (Content-Type как "application/json"). Это хорошо работает в моем локальном, как и ожидалось, Angular может интерпретировать ответ JSON, но когда дело доходит до некоторой распространенной среды QA, он терпит неудачу, потому что ошибка 501 представлена ​​в UI как text/html, которую Angular не может переварить.

Разница между моим локальным и QA заключается в том, что Angular работает на узле, тогда как QA использует Apache. Является ли Apache, который преобразует JSON-ответ с 501 http-кодом в html-тип?

ответ на мой браузер ниже.

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>501 Not Implemented</title>
</head><body>
<h1>Not Implemented</h1>
<p>GET to /test/customer/getCustomer not supported.<br />
</p>
</body></html>

1 ответ

Решение

Наконец, я смог найти причину, по которой Apache заменил все не 2XX ответы своим собственным документом об ошибке. Все, что вам нужно сделать, это прокомментировать или отключить ProxyErrorOverride. С этим Apache будет передавать ответ об ошибке прокси-сервера как есть с внутреннего сервера в интерфейс без потери содержимого, например, он отправляет ответ об ошибке типа Json без потери заголовков.

ProxyErrorOverride Off

Надеюсь, это кому-нибудь поможет.

Другие вопросы по тегам