После недавнего обновления до Tomcat 9 с Tomcat 8 у меня возникли проблемы с заголовком запроса, который содержит специальные символы, для моего случая символы «<» и «>». Ошибка гласит: «В цели запроса найден недопустимый символ. Допустимые символы определены в RFC 7230 и RFC 3986».
Я попытался найти способ и наткнулся на решение, в котором говорится, что я могу добавить "relaxedQueryChars="<,>" в файл server.xml моего сервера, но проблема с этим решением заключается в том, что нам не разрешено ничего редактировать в server, так как он управляется марионеткой, поэтому он просто перезаписывается каждый раз.
Есть ли способ добавить RelaxQueryChars="<,>" в мое приложение вместо того, чтобы добавлять его на сервер? Где-то, например, в context.xml или web.xml, я точно не знаю.
Сообщение об ошибке:
java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
java.base/java.lang.Thread.run(Thread.java:834)
Возможный дубликат Tomcat 8 не может обработать запрос на получение с помощью '|' в параметрах запроса?
Если проблема в том, что puppet перезаписывает его, вам нужно исправить это в развертывании puppet.
Кодировка XML не вариант? Если вы можете контролировать то, что отправляется, просто не отправляйте недопустимые символы.
Спасибо всем за помощь. Можно настроить марионетку, но я собираюсь просто обновить код и не отправлять недопустимые символы.
Извини, нет. relaxedQueryChars
— это атрибут Connector, поэтому его можно установить только в server.xml.
Возможные варианты включают в себя:
relaxedQueryChars
.Спасибо! Да, похоже, я могу настроить Puppet для установки relaxedQueryChars
Я также могу исправить это в приложении, кодирующем эти символы. Оба эти варианта кажутся жизнеспособными, и я просто обновлю свой код.
Я думаю, что решение состоит в том, чтобы закодировать эти символы перед их отправкой на сервер (предположительно, но это кажется вероятным).