Apache mod_proxy URL-кодировка

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

Также есть Apache2, который перенаправляет запросы в веб-сервис

<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

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

2 ответа

Решение

Решено указанием

ProxyPass /webservice balancer://api/webservice nocanon

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

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

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

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>
Другие вопросы по тегам