我有一个以/{parameter} 形式接受参数的 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

如果我直接请求 webservice,Tomcat/Jetty 会处理它,并且服务会收到正确的参数。

最佳答案

通过指定解决

ProxyPass /webservice balancer://api/webservice nocanon

关于Apache mod_proxy url 编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12895674/

10-13 01:18