Подтвердить что ты не робот

Apache mod_proxy url encoding

У меня есть служба REST, которая принимает параметры в форме /{parameter}

Также есть Apache2, который пересылает запросы в websevice

<VirtualHost *:9091>
  AllowEncodedSlashes NoDecode
  LogLevel debug
  ProxyPass /webservice balancer://api/webservice

  <Proxy balancer://api>
     BalancerMember http://localhost:8030
  </Proxy>
</VirtualHost>

Параметры могут содержать закодированные символы, такие как% 2f (/)

Проблема заключается в том, что Apache снова кодирует эти символы, а Webservice получает% 252F вместо% 2F

[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //api/webservice/Interface GigabitEthernet1%2F0%2F2
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(581): proxy: BALANCER (balancer://api) worker (http://localhost:8030) rewritten to http://localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization

Если я запрашиваю webservice напрямую, Tomcat/Jetty обрабатывает его, и поиск получает правильный параметр.

4b9b3361

Ответ 1

Решено, указав

ProxyPass /webservice balancer://api/webservice nocanon

Ответ 2

Немного от темы, так как это не решает проблему со слэшами, но я все равно добавлю ее сюда, если кто-то еще столкнется с той же проблемой, что и у меня.

У меня была аналогичная проблема с тем, что специальные символы (åäö) в параметрах url не обрабатывались корректно при передаче через прокси-сервер apache. Оказалось, что apache работает нормально, но в приемном экземпляре tomcat в AJP-коннекторе отсутствует конфигурация URIEncoding.

Из моего tomcat server.xml:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>