tomcat 8 выдает 400 ошибок при работе с запросами get - PullRequest
0 голосов
/ 25 сентября 2018

Кажется, проблема в используемых фигурных скобках {}.Я попытался изменить соединитель, который находится в server.xml, добавив relaxedPathChars='{ | }' relaxedQueryChars='{ | }', но не устранил проблему.также добавлен URIEncoding="UTF-8" useBodyEncodingForURI="true" к тому же соединителю.

Я не могу сам изменить фигурные скобки, как это происходит из внешнего скрипта, и я не могу изменить строку URL-адреса заранее, поэтому я пытаюсь изменить настройки в Tomcatразрешить {}, но пока не повезло.

Это все на веб-сервере nginx, если это поможет.

Ответы [ 2 ]

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

Более новые версии Tomcat пытаются соответствовать RFC7230 / RFC3986 (ограничение, какие символы могут использоваться в URL).Но это вызывает проблемы с некоторыми старыми приложениями, и теперь есть способ переопределить эти правила.(см. обсуждение здесь: https://bz.apache.org/bugzilla/show_bug.cgi?id=62273)

В последних версиях Tomcat произошли некоторые изменения этого поведения.

В текущих версиях (8.0.53, 8.5.34, 9.0.12) выможно использовать атрибуты Connector в relaxedPathChars и relaxedQueryChars в server.xml:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="60000" 
          relaxedQueryChars='^{}|[]' 
          redirectPort="8443" />

В более старых версиях это поведение было настроено как устаревшее (!) системное свойство tomcat.util.http.parser.HttpParser.requestTargetAllow (https://tomcat.apache.org/tomcat-8.5-doc/config/systemprops.html)

Обратите внимание, что есть некоторые версии Tomcat, которые реализуют строгие правила, но пока не имеют этой опции.

(Я также видел Tomcatверсия, которая была старше, но исправлена ​​- это поведение было изменено для устранения возможной уязвимости - http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-6816)

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

Вы не можете использовать фигурные скобки в URL.

RFC1738 перечисляет их как небезопасные символы и говорит, что небезопасные символы всегда должны кодироваться в URL.

Вынужно будет найти способ изменить { на %7B и } на %7D перед тем, как передать запрос, или по замыслу запрос никогда не будет работать.

...