13

我有一个 REST 服务,它接受 /{parameter} 形式的参数

还有 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

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

4

2 回答 2

15

通过指定解决

ProxyPass /webservice balancer://api/webservice nocanon
于 2013-01-15T13:41:49.353 回答
1

有点跑题了,因为这并不能解决斜杠的问题,但是如果其他人遇到与我相同的问题,我无论如何都会在此处添加它。

我有一个类似的问题,当通过 apache 代理传递时,url 参数中的瑞典特殊字符 (åäö) 未正确处理。事实证明,apache 运行良好,但在接收 tomcat 实例中,AJP 连接器缺少 URIEncoding 配置。

从我的 tomcat server.xml :

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>
于 2015-09-10T07:45:54.137 回答