Tomcat: пользовательская страница ошибки вместо пустого ответа - PullRequest
0 голосов
/ 07 сентября 2018

Tomcat отклоняет некоторые запросы с пустым HTTP 400 ответом.

Пара примеров:

URL запроса, содержащий некодированные символы (например, '[' или ']' с момента Tomcat 8.5.x), вызывает:

INFO  o.a.c.h.Http11Processor   Error parsing HTTP request header
 Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

Страница ошибки 400 также возвращается, например, когда размер заголовка слишком велик:

INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException: Request header is too large

Возможно ли иметь собственную страницу ошибок для этих ошибок? В более общем случае, когда Tomcat запускает этот ответ HTTP 400. Доставка пустого ответа - худший UX. Я знаю, что следует избегать создания таких запросов, но, тем не менее, я ищу запасной вариант.

Я настроил пользовательскую страницу ошибки в моем (встроенном) контексте Tomcat с ctx.addErrorPage(...) для кода ошибки 400.

Он работает правильно, когда запускается из моего веб-приложения. Например. при передаче обработки ошибок механизму обработки ошибок сервлета с res.sendError(SC_BAD_REQUEST); - res, равным HttpServletResponse.

К сожалению, для вида ошибок tomcat, описанного вверху, пользовательская страница ошибок не используется.

Спасибо!

1 Ответ

0 голосов
/ 19 сентября 2018

Это тоже неприятность для меня. К сожалению, из-за взгляда на источники, он, кажется, глубоко связан с внутренностями Tomcat и не может быть легко изменен.

В частности, отмеченные вами исключения добавляются в org.apache.coyote.http11.Http11InputBuffer, который является частью одного из компонентов Tomcat, называемого Coyote HTTP / 1.1 Connector (старые документы, более новые документы не имеют этого) :

Элемент Coyote HTTP / 1.1 Connector представляет компонент Connector который поддерживает протокол HTTP / 1.1. Это позволяет Каталине функционировать в качестве автономного веб-сервера, в дополнение к его способности выполнять сервлеты и страницы JSP.

Кроме того, исключения заканчиваются на catalina.log и очень короткие - сравните это с тем, когда вы получаете исключение от процессора JSP, которое в несколько раз превышает этот размер.

Так что я думаю, что это несложно исправить - по крайней мере, без знания внутренних компонентов Tomcat, которых у меня нет: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...