Привет, я хочу отказаться от входящих запросов со слишком большим телом или заголовком в моем Jetty. Предположим, что мне нужно установить некоторый фильтр, но я не нашел никакого решения. Есть ли у вас какие-либо предложения? Благодарю.Jetty - фильтрация больших сообщений
ответ
достаточно просто построить Servlet Filter
или Jetty Handler
, что обращает внимание на Content-Length
заголовка запроса, а затем отклоняет (реагирующий с кодом состояния ошибки HTTP) запрос.
Что касается предельного размера заголовка, который управляется HttpConfiguration.setRequestHeaderSize(int)
Однако есть класс запросов, который использует Chunked Transfer-Encoding
, с этими видами запросов, нет Content-Length
и вы просто должны отклоните запрос при чтении с HttpServletRequest.getInputStream()
после того, как он достигнет определенного размера.
Существует также сложность содержимого тела запроса многопользовательского режима Mime и того, как вы определяете содержание запроса слишком велико.
Еще одно примечание, к сожалению, из-за того, что обработка HTTP-соединения должна выполняться, даже если клиент отправляет вам слишком большой объем содержимого запроса, сервер все равно должен прочитать это содержимое всего тела и выбросить его. Это полузакрытый сценарий, найденный в спецификации, его до клиента, чтобы увидеть ранний отклоненный ответ HTTP и закрыть/завершить соединение.